@ComponentV2初体验设备信息查看器

2024-08-01 19:05:29 浏览数 (2)

今天我们来做一个设备信息查看器。

设备信息查看器

设备信息查看器 APP 具有多重重要意义。

首先,它为用户提供了对设备硬件和软件配置的清晰了解。用户可以知晓设备的处理器型号、内存容量、存储状况、操作系统版本等关键信息,有助于评估设备的性能和功能,判断是否满足自身需求。

其次,对于技术爱好者和开发者而言,这类 APP 是进行设备调试、优化和开发的有力工具。他们可以依据详细的设备信息,针对性地调整软件设置,开发适配特定硬件的应用程序。

再者,在设备维护和故障排查方面,它能帮助用户迅速定位问题。例如,如果设备运行缓慢,通过查看内存占用、CPU 使用率等信息,可以初步判断是否存在资源过度消耗的情况。

此外,当用户考虑升级设备或更换部件时,设备信息查看器 APP 提供的准确数据能作为决策的重要依据,确保新的组件与现有设备兼容。

总之,设备信息查看器 APP 无论是对普通用户了解自身设备,还是对专业人员进行技术操作,都具有显著的实用价值。

功能

设备信息查看器通常具有以下功能:

  1. 硬件信息展示:包括处理器型号、核心数、主频;显卡型号、显存容量;内存容量、类型和频率;硬盘容量、类型(如机械硬盘或固态硬盘)、转速;主板型号等。
  2. 操作系统信息:如操作系统的版本、安装日期、系统类型(32 位或 64 位)、激活状态等。
  3. 网络相关信息:网络适配器的型号、MAC 地址、IP 地址;已连接的无线网络名称和信号强度等。
  4. 电池信息:如果是移动设备,会显示电池的健康状况、剩余电量百分比、充电状态、循环次数等。
  5. 设备序列号和识别码:方便用户进行设备的注册、保修和售后服务。
  6. 显示设备的传感器信息:例如重力传感器、陀螺仪、光线传感器等是否正常工作。
  7. 安装的软件和驱动程序列表:用户可以了解已安装的应用程序名称、版本以及相关驱动程序的信息。
  8. 端口和接口信息:如 USB 端口数量和类型、音频接口等。
  9. 性能监测:实时监测 CPU 使用率、内存占用率、硬盘读写速度等性能指标。
  10. 设备温度监控:展示设备各部件的温度,以预防过热问题。

这些功能可以帮助用户全面了解设备的状况,为设备的维护、优化和问题排查提供有力支持。

效果

image-20240726090341489

具体使用接口

以下各项所需要的权限有所不同,详见下表。

名称

类型

可读

可写

说明

deviceType

string

设备类型,只允许查询,结果不能用于业务代码开发。详细请参考deviceTypes 标签[1]。元服务 API:从 API version 11 开始,该接口支持在元服务中使用。

manufacture

string

设备厂家名称。

brand

string

设备品牌名称。元服务 API:从 API version 11 开始,该接口支持在元服务中使用。

marketName

string

外部产品系列。

productSeries

string

产品系列。

productModel

string

认证型号。元服务 API:从 API version 11 开始,该接口支持在元服务中使用。

softwareModel

string

内部软件子型号。

hardwareModel

string

硬件版本号。

hardwareProfile(deprecated)

string

硬件 Profile。说明:从 API version 6 开始支持,从 API version 9 开始废弃。

serial

string

设备序列号,仅限系统应用使用。说明:可作为设备唯一识别码。需要权限:ohos.permission.sec.ACCESS_UDID

bootloaderVersion

string

Bootloader 版本号。

abiList

string

应用二进制接口(Abi)。

securityPatchTag

string

安全补丁级别。

displayVersion

string

产品版本。

incrementalVersion

string

差异版本号。

osReleaseType

string

系统的发布类型,取值为:- Canary:面向特定开发者发布的早期预览版本,不承诺 API 稳定性。- Beta:面向开发者公开发布的 Beta 版本,不承诺 API 稳定性。- Release:面向开发者公开发布的正式版本,承诺 API 稳定性。

osFullName

string

系统版本。元服务 API:从 API version 11 开始,该接口支持在元服务中使用。

majorVersion

number

Major 版本号,随主版本更新增加。

seniorVersion

number

Senior 版本号,随局部架构、重大特性增加。

featureVersion

number

Feature 版本号,标识规划的新特性版本。

buildVersion

number

Build 版本号,标识编译构建的版本号。

sdkApiVersion

number

系统软件 API 版本。

firstApiVersion

number

首个版本系统软件 API 版本。

versionId

string

版本 ID。

buildType

string

构建类型。

buildUser

string

构建用户。

buildHost

string

构建主机。

buildTime

string

构建时间。

buildRootHash

string

构建版本 Hash。

udid7

string

设备 Udid,仅限系统应用使用。说明:数据长度为 65 字节。可作为设备唯一识别码。需要权限:ohos.permission.sec.ACCESS_UDID

distributionOSName10

String

发行版系统名称。

distributionOSVersion10

String

发行版系统版本号。

distributionOSApiVersion10

number

发行版系统 api 版本。

distributionOSReleaseType10

String

发行版系统类型。

ODID12

String

开发者匿名设备标识符。ODID 值会在以下场景重新生成:手机恢复出厂设置。同一设备上同一个开发者的应用全部卸载后重新安装时。ODID 生成规则:同一设备上运行的同一个开发者的应用,ODID 相同。同一个设备上不同开发者的应用,ODID 不同。不同设备上同一个开发者的应用,ODID 不同。不同设备上不同开发者的应用,ODID 不同。说明:数据长度为 37 字节。

本次我们可以使用自定义组件实现。

代码语言:javascript复制
@ComponentV2
export struct DescInfo {
  @Param title: string = '';
  @Param desc: string = '';

  build() {
    Row() {
      Text(this.title)
      Text(this.desc)
    }
  }
}

接下来一起看一下参数说明。

@ComponentV2 概述

@Component 装饰器[2]一样,@ComponentV2 装饰器用于装饰自定义组件:

  • 在@ComponentV2 装饰的自定义组件中,开发者仅可以使用全新的状态变量装饰器,包括@Local、@Param、@Once、@Event、@Provider、@Consumer 等。
  • @ComponentV2 装饰的自定义组件暂不支持组件复用、LocalStorage 等现有自定义组件的能力。
  • 无法同时使用@ComponentV2 与@Component 装饰同一个 struct 结构。
  • @ComponentV2 支持一个可选的 boolean 类型参数 freezeWhenInactive,来实现组件冻结功能[3]。
  • 一个简单的@ComponentV2 装饰的自定义组件应具有以下部分:

@Param 装饰器说明

@Param 变量装饰器

说明

装饰器参数

无。

能否本地修改

否,修改值需使用@Event 装饰器的能力。

同步类型

由父到子单向同步。

允许装饰的变量类型

Object、class、string、number、boolean、enum 等基本类型以及 Array、Date、Map、Set 等内嵌类型。支持 null、undefined 以及联合类型。

被装饰变量的初始值

允许本地初始化,若不在本地初始化,则需要和@Require 装饰器一起使用,要求必须从外部传入初始化。

变量传递

传递规则

说明

从父组件初始化

@Param 装饰的变量允许本地初始化,若无本地初始化则必须从外部传入初始化。当同时存在本地初始值与外部传入值时,会优先使用外部传入值进行初始化

初始化子组件

@Param 装饰的变量可以初始化子组件中@Param 装饰的变量。

同步

@Param 可以和父组件传入的状态变量数据源(即@Local 或@Param 装饰的变量)进行同步,当数据源发生变化时,会将修改同步给子组件的@Param。

当装饰的变量类型是内置类型时,可以观察到变量整体赋值以及通过 API 调用带来的变化。

类型

可观测变化的 API

Array

push、pop、shift、unshift、splice、copyWithin、fill、reverse、sort

Date

setFullYear, setMonth, setDate, setHours, setMinutes, setSeconds, setMilliseconds, setTime, setUTCFullYear, setUTCMonth, setUTCDate, setUTCHours, setUTCMinutes, setUTCSeconds, setUTCMilliseconds

Map

set, clear, delete

Set

add, clear, delete

关键代码

代码语言:javascript复制
import { deviceInfo } from '@kit.BasicServicesKit';

@Entry
@ComponentV2
struct DeviceInfoPage {
  build() {
    Column() {
      DescInfo({
        title: "设备类型",
        desc: deviceInfo.deviceType
      })
      DescInfo({

        title: "设备厂家名称。",
        desc: deviceInfo.manufacture
      })
      DescInfo({

        title: "设备品牌名称",
        desc: deviceInfo.brand
      })
      DescInfo({
        title: "外部产品系列",
        desc: deviceInfo.marketName
      })
      DescInfo({
        title: "产品系列",
        desc: deviceInfo.productSeries
      })
      DescInfo({
        title: "内部软件子型号",
        desc: deviceInfo.softwareModel
      })
      DescInfo({
        title: "硬件版本号",
        desc: deviceInfo.hardwareModel
      })
      DescInfo({
        title: "系统版本",
        desc: deviceInfo.osFullName
      })
      DescInfo({
        title: "系统软件API版本",
        desc: deviceInfo.sdkApiVersion.toString()
      })
      DescInfo({
        title: "发行版系统名称",
        desc: deviceInfo.distributionOSName
      })
      DescInfo({
        title: "发行版系统版本号",
        desc: deviceInfo.distributionOSVersion
      })
      DescInfo({
        title: "发行版系统api版本",
        desc: deviceInfo.distributionOSApiVersion.toString()
      })
      DescInfo({
        title: "发行版系统类型",
        desc: deviceInfo.distributionOSReleaseType
      })
      DescInfo({
        title: "设备序列号",
        desc: deviceInfo.serial
      })
      DescInfo({
        title: "Bootloader版本号",
        desc: deviceInfo.bootloaderVersion
      })
      DescInfo({
        title: "安全补丁级别",
        desc: deviceInfo.securityPatchTag
      })
      DescInfo({
        title: "产品版本",
        desc: deviceInfo.displayVersion
      })
      DescInfo({
        title: "系统的发布类型",
        desc: deviceInfo.osReleaseType
      })
      DescInfo({
        title: "Major版本号",
        desc: deviceInfo.majorVersion.toString()
      })
      DescInfo({
        title: "Senior版本号",
        desc: deviceInfo.seniorVersion.toString()
      })

      DescInfo({
        title: "Feature版本号",
        desc: deviceInfo.featureVersion.toString()
      })
      DescInfo({
        title: "firstApiVersion",
        desc: deviceInfo.firstApiVersion.toString()
      })

      DescInfo({
        title: "版本ID",
        desc: deviceInfo.versionId
      })
      DescInfo({
        title: "构建类型",
        desc: deviceInfo.buildType
      })


      DescInfo({
        title: "构建用户",
        desc: deviceInfo.buildUser
      })
      DescInfo({
        title: "构建主机",
        desc: deviceInfo.buildHost
      })
      DescInfo({
        title: "构建时间",
        desc: deviceInfo.buildTime
      })
    }
    .height('100%')
    .width('100%')
  }
}

@ComponentV2
export struct DescInfo {
  @Param title: string = '';
  @Param desc: string = '';

  build() {
    Row() {
      Text(this.title)
      Text(this.desc)
    }
  }
}

是不是很简单。

总结

最后总结一下实现步骤

1.导入模块,拿到设备信息

2.自定义组件,组件封装

3.使用状态管理刷新内容。

参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-device-info-V5

参考资料

[1]

deviceTypes 标签: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/module-configuration-file-V5#devicetypes标签

[2]

@Component 装饰器: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-create-custom-components-V5

[3]

组件冻结功能: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-custom-components-freezev2-V5

0 人点赞