核心结论:无法直接获取,需通过蓝牙绕行
·
在 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()。 该接口返回的蓝牙本地名称通常与系统设置中的设备名称同步,且普通三方应用可通过申请蓝牙权限调用。
更多推荐



所有评论(0)