今天我们来做一个设备信息查看器。
设备信息查看器
设备信息查看器 APP 具有多重重要意义。
首先,它为用户提供了对设备硬件和软件配置的清晰了解。用户可以知晓设备的处理器型号、内存容量、存储状况、操作系统版本等关键信息,有助于评估设备的性能和功能,判断是否满足自身需求。
其次,对于技术爱好者和开发者而言,这类 APP 是进行设备调试、优化和开发的有力工具。他们可以依据详细的设备信息,针对性地调整软件设置,开发适配特定硬件的应用程序。
再者,在设备维护和故障排查方面,它能帮助用户迅速定位问题。例如,如果设备运行缓慢,通过查看内存占用、CPU 使用率等信息,可以初步判断是否存在资源过度消耗的情况。
此外,当用户考虑升级设备或更换部件时,设备信息查看器 APP 提供的准确数据能作为决策的重要依据,确保新的组件与现有设备兼容。
总之,设备信息查看器 APP 无论是对普通用户了解自身设备,还是对专业人员进行技术操作,都具有显著的实用价值。
功能
设备信息查看器通常具有以下功能:
- 硬件信息展示:包括处理器型号、核心数、主频;显卡型号、显存容量;内存容量、类型和频率;硬盘容量、类型(如机械硬盘或固态硬盘)、转速;主板型号等。
- 操作系统信息:如操作系统的版本、安装日期、系统类型(32 位或 64 位)、激活状态等。
- 网络相关信息:网络适配器的型号、MAC 地址、IP 地址;已连接的无线网络名称和信号强度等。
- 电池信息:如果是移动设备,会显示电池的健康状况、剩余电量百分比、充电状态、循环次数等。
- 设备序列号和识别码:方便用户进行设备的注册、保修和售后服务。
- 显示设备的传感器信息:例如重力传感器、陀螺仪、光线传感器等是否正常工作。
- 安装的软件和驱动程序列表:用户可以了解已安装的应用程序名称、版本以及相关驱动程序的信息。
- 端口和接口信息:如 USB 端口数量和类型、音频接口等。
- 性能监测:实时监测 CPU 使用率、内存占用率、硬盘读写速度等性能指标。
- 设备温度监控:展示设备各部件的温度,以预防过热问题。
这些功能可以帮助用户全面了解设备的状况,为设备的维护、优化和问题排查提供有力支持。
效果
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