鸿蒙开发-获取设备硬件信息

470 阅读3分钟

1 设备信息

@ohos.deviceInfo

// 获取设备信息
getDeviceInfo() {
  this.marketName = deviceInfo.marketName // 设备名称
  this.osFullName = deviceInfo.osFullName // 系统版本
  this.sdkApiVersion = deviceInfo.sdkApiVersion.toString() // SDK API 版本
  this.deviceType = deviceInfo.deviceType // 设备类型
}

image.png

2 获取系统运行时间

@ohos.process

下载处理时间插件

dayjs

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分')
}

image.png

3 获取网络类型

@ohos.net.connection

在module.json5中配置网络权限

 "requestPermissions": [
      {
        "name": "ohos.permission.GET_NETWORK_INFO"// 获取网络信息权限
      }
    ],

注意

配置的是ohos.permission.GET_NETWORK_INFO

而不是ohos.permission.INTERNET

image.png

NetBearType

名称说明
BEARER_CELLULAR0蜂窝网络
BEARER_WIFI1Wi-Fi网络
BEARER_BLUETOOTH12+2蓝牙网络
BEARER_ETHERNET3以太网网络
BEARER_VPN12+4VPN网络
// 获取网络类型
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 = '蜂窝网络'
  }
}

image.png

4 获取 IP 地址

@ohos.net.connection

image.png

//获取 IP 地址
getIPAddress() {
  // 获取默认网络
  const netHandle = connection.getDefaultNetSync()
  // 获取网络连接信息
  const connectionProperties = connection.getConnectionPropertiesSync(netHandle)
  // 提取链路信息
  const linkAddress = connectionProperties.linkAddresses?.[0]
  if (linkAddress) {
    // 提取 IP 地址
    this.IPAddress = linkAddress.address.address
  }
}

image.png

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('.');
}

image.png

6 获取屏幕分辨率

@ohos.display

image.png 返回值类型 Display

// 获取屏幕分辨率
getDisplayInfo() {
  // 获取默认显示器
  const defaultDisplay = display.getDefaultDisplaySync()
  // 获取屏幕高度
  this.displayHeight = defaultDisplay.height
  // 获取屏幕宽度
  this.displayWidth = defaultDisplay.width
  // 获取屏幕刷新率
  this.displayRefreshRate = defaultDisplay.refreshRate
  // 获取像素密度
  this.displayDensityDPI = defaultDisplay.densityDPI
}

image.png

7 获取传感器信息

@ohos.sensor

image.png

输出传感器属性列表

我们根据传感器属性列表可以发现,每个传感器的id是唯一的 image.png

我们将每个传感器的id和名称定义为一个数组,然后通过遍历数组是否具有该传感器 image.png

获取传感器信息

// 获取传感器信息
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) ? '有' : '-'
    })
  })

image.png