1 设备信息
// 获取设备信息
getDeviceInfo() {
this.marketName = deviceInfo.marketName // 设备名称
this.osFullName = deviceInfo.osFullName // 系统版本
this.sdkApiVersion = deviceInfo.sdkApiVersion.toString() // SDK API 版本
this.deviceType = deviceInfo.deviceType // 设备类型
}
2 获取系统运行时间
下载处理时间插件
ohpm install dayjs
import dayjs from 'dayjs'; // 导入 dayjs 核心包
import duration from 'dayjs/plugin/duration'; // 导入 duration 运行时长插件
dayjs.extend(duration) // 注册 duration 运行时长插件
// 获取系统运行时间
getUptime() {
this.uptime = process.uptime() // 单位:秒
}
// 计算启动时间,YYYY-MM-DD HH:mm:ss
formatToDateTime(seconds: number) {
// 根据减去秒数计算启动时间,返回 dayjs 对象
const dayjsInstance = dayjs().subtract(seconds, 'seconds')
// 格式化 dayjs 对象
return dayjsInstance.format('YYYY-MM-DD HH:mm:ss')
}
// 计算运行时长:D天HH小时mm分
formatToDate(seconds: number) {
// 根据秒数计算运行时长,返回 dayjs 对象
const dayjsInstance = dayjs.duration(seconds, 'seconds')
// 格式化 dayjs 对象
return dayjsInstance.format('D天H小时mm分')
}
3 获取网络类型
在module.json5中配置网络权限
"requestPermissions": [
{
"name": "ohos.permission.GET_NETWORK_INFO"// 获取网络信息权限
}
],
注意
配置的是ohos.permission.GET_NETWORK_INFO ✅
而不是ohos.permission.INTERNET❌
NetBearType
| 名称 | 值 | 说明 |
|---|---|---|
| BEARER_CELLULAR | 0 | 蜂窝网络 |
| BEARER_WIFI | 1 | Wi-Fi网络 |
| BEARER_BLUETOOTH12+ | 2 | 蓝牙网络 |
| BEARER_ETHERNET | 3 | 以太网网络 |
| BEARER_VPN12+ | 4 | VPN网络 |
// 获取网络类型
getConnection() {
const hasDefaultNet = connection.hasDefaultNetSync() // 是否有默认网络
// 没有网络
if (!hasDefaultNet) {
this.netBearType = '无网络连接'
} else {
this.getConnectionNetBearType()
}
}
// 获取网络类型
getConnectionNetBearType() {
// 1. 获取默认网络
const defaultNet = connection.getDefaultNetSync()
// 2. 获取网络能力信息
const netCapabilities = connection.getNetCapabilitiesSync(defaultNet)
// 3. 判断网络类型
if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_ETHERNET)) {
this.netBearType = '以太网网络'
} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_WIFI)) {
this.netBearType = 'WIFI网络'
} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_CELLULAR)) {
this.netBearType = '蜂窝网络'
}
}
4 获取 IP 地址
//获取 IP 地址
getIPAddress() {
// 获取默认网络
const netHandle = connection.getDefaultNetSync()
// 获取网络连接信息
const connectionProperties = connection.getConnectionPropertiesSync(netHandle)
// 提取链路信息
const linkAddress = connectionProperties.linkAddresses?.[0]
if (linkAddress) {
// 提取 IP 地址
this.IPAddress = linkAddress.address.address
}
}
5 计算子网掩码和广播地址
5.1 子网掩码
/**
* 计算子网掩码
* @param prefixLength 前缀长度
* @returns 子网掩码字符串
*/
function calculateSubnetMask(prefixLength: number): string {
// 计算每个字节的子网掩码部分
let subnetMask = '';
for (let i = 0; i < 4; i++) {
// 每个字节中的有效位数
const bits = Math.min(prefixLength, 8);
// 计算子网掩码字节的值并添加到结果字符串
subnetMask += (256 - Math.pow(2, 8 - bits)) + '.';
// 更新剩余的位数
prefixLength -= bits;
}
// 去除末尾的点并返回子网掩码字符串
return subnetMask.slice(0, -1);
}
5.2 广播地址
/**
* 计算广播地址
* @param ipAddress IP地址字符串,例如 "192.168.2.13"
* @param subnetMask 子网掩码字符串,例如 "255.255.255.0"
* @returns 广播地址字符串
*/
function calculateBroadcastAddress(ipAddress: string, subnetMask: string): string {
// 将IP地址字符串转换为数字数组
const ipParts: number[] = ipAddress.split('.')
.map(Number);
// 将子网掩码字符串转换为数字数组
const subnetParts: number[] = subnetMask.split('.')
.map(Number);
// 计算每个字节的广播地址部分
const broadcastParts: number[] = [];
for (let i = 0; i < 4; i++) {
// 计算每个字节的广播地址值并添加到结果数组
broadcastParts.push(ipParts[i] | (255 - subnetParts[i]));
}
// 将结果数组转换为字符串并使用点分隔
return broadcastParts.join('.');
}
6 获取屏幕分辨率
返回值类型
Display
// 获取屏幕分辨率
getDisplayInfo() {
// 获取默认显示器
const defaultDisplay = display.getDefaultDisplaySync()
// 获取屏幕高度
this.displayHeight = defaultDisplay.height
// 获取屏幕宽度
this.displayWidth = defaultDisplay.width
// 获取屏幕刷新率
this.displayRefreshRate = defaultDisplay.refreshRate
// 获取像素密度
this.displayDensityDPI = defaultDisplay.densityDPI
}
7 获取传感器信息
输出传感器属性列表
我们根据传感器属性列表可以发现,每个传感器的id是唯一的
我们将每个传感器的id和名称定义为一个数组,然后通过遍历数组是否具有该传感器
获取传感器信息
// 获取传感器信息
async getSensorList() {
// 获取设备上的所有传感器信息
const sensorList = await sensor.getSensorList()
// 通过 map 提取出传感器的 id 集合
this.supportSensorIds = sensorList.map(item => item.sensorId)
}
遍历数组
// 传感器信息
ForEach(SENSOR_NAME_LIST, (item: SensorName) => {
ListRow({
title: item.sensorName,
value: this.supportSensorIds.includes(item.sensorId) ? '有' : '-'
})
})