在 HarmonyOS NEXT 中,没有公开的系统 API 能直接获取用户自定义的设备名称(如用户手动修改的“张三的Mate 60 Pro”)。deviceInfo 模块返回的是设备的固定硬件信息(品牌、型号等),而非用户可修改的名称。

目前可行的方案是通过蓝牙接口 connection.getLocalName() 获取蓝牙本地设备名称——该名称与用户在设置中修改的设备名通常是同步的。


方案一:通过蓝牙 API 获取(推荐,三方应用可用)

实现代码

typescript

import { connection } from '@kit.ConnectivityKit';
import { BusinessError } from '@kit.BasicServicesKit';

try {
    // 获取蓝牙本地设备名称,该名称通常与系统自定义设备名一致
    let localName: string = connection.getLocalName();
    console.info('获取到的设备自定义名称: ' + localName);
} catch (err) {
    let error = err as BusinessError;
    console.error('获取设备名称失败,错误码: ' + error.code + ', 信息: ' + error.message);
}

权限配置

在 module.json5 中声明蓝牙权限:

json

{
  "requestPermissions": [
    {
      "name": "ohos.permission.ACCESS_BLUETOOTH"
    }
  ]
}

注意:该方案依赖蓝牙功能,如果设备蓝牙关闭,可能无法获取到正确名称。这是目前三方应用获取自定义设备名最可行的方式。


方案二:deviceInfo 模块(仅获取硬件型号,非自定义名称)

此方案无法获取用户自定义名称,只能获取设备的固定硬件信息,如品牌、型号等。

代码示例

typescript

import { deviceInfo } from '@kit.BasicServicesKit';

// 这些字段返回的是硬件信息,不是用户自定义名称
let brand: string = deviceInfo.brand;           // "HUAWEI"
let marketName: string = deviceInfo.marketName; // "HUAWEI Mate 60"
let productModel: string = deviceInfo.productModel; // "TAS-AL00"
let softwareModel: string = deviceInfo.softwareModel;

// 组合成类似 "HUAWEI Mate 60 Pro" 的展示名称
let deviceDisplayName = brand + ' ' + marketName;
console.info('设备硬件名称: ' + deviceDisplayName);

deviceInfo 可获取的字段说明

字段 说明 示例值
brand 品牌名称 "HUAWEI"
marketName 外部产品系列(市场名称) "HUAWEI Mate 60"
productModel 认证型号 "TAS-AL00"
softwareModel 内部软件子型号 "ALN-AL00"
deviceType 设备类型 "phone"

注意deviceInfo 返回的是设备出厂硬件信息,不是用户在设置中修改的自定义名称


方案三:企业设备管理 API(仅系统应用可用)

企业设备管理模块 @ohos.enterprise.deviceInfo 提供获取设备信息的能力,但需要设备管理应用权限(ohos.permission.sec.ACCESS_UDID),仅限系统应用使用,普通三方应用无法调用。

typescript

// ⚠️ 以下代码仅系统应用可用,三方应用无法使用
import { deviceInfo } from '@ohos.enterprise.deviceInfo';
// 需要 sec.ACCESS_UDID 权限,仅系统应用可申请

方案四:uni-app 跨平台开发场景

如果使用 uni-app 开发鸿蒙应用,可通过 uni.getSystemInfoSync() 获取设备信息:

javascript

const info = uni.getSystemInfoSync();
console.log('品牌:', info.brand);   // 硬件品牌
console.log('型号:', info.model);   // 设备型号
console.log('平台:', info.platform); // "ohos"

但此方式同样获取的是硬件信息而非用户自定义名称


各方案对比总结

方案 获取内容 是否三方应用可用 权限要求
蓝牙 getLocalName() 用户自定义设备名 ✅ 可用 ohos.permission.ACCESS_BLUETOOTH
deviceInfo 模块 硬件品牌、型号(如"HUAWEI Mate 60") ✅ 可用
企业 deviceInfo 设备详细信息 ❌ 仅系统应用 sec.ACCESS_UDID
uni-app getSystemInfoSync 品牌、型号 ✅ 可用

总结

在 HarmonyOS NEXT 中,获取用户自定义设备名称的唯一可行方案是通过蓝牙接口 connection.getLocalName() 该接口返回的蓝牙本地名称通常与系统设置中的设备名称同步,且普通三方应用可通过申请蓝牙权限调用。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐