HarmonyOS 鸿蒙Next中如何检测设备是否支持 UWB(超宽带)定位?
HarmonyOS 鸿蒙Next中如何检测设备是否支持 UWB(超宽带)定位?
计划开发数字车钥匙功能,需确认设备硬件支持 UWB,应该如何检查检测 设备是否支持 UWB(超宽带)定位?着急调研确定能否执行~各位大佬
A: 可通过 Wallet Kit 能力集的 queryPassDeviceInfo 接口实现设备 UWB 能力检测。
详细步骤过程
通过调用 walletPass.WalletPassClient 的 queryPassDeviceInfo 方法,传入设备类型参数,解析返回的 deviceCapabilities 字段即可判断设备支持的定位技术类型。
一、设备能力值说明
| 能力值 | 支持的技术 | 说明 |
|---|---|---|
0200 |
NFC | 仅支持近场通信 |
0201 |
NFC + BLE | 支持近场通信和蓝牙低功耗 |
0202 |
UWB | 支持超宽带定位(目标能力) |
0203 |
SLE | 支持低功耗定位技术 |
二、完整实现代码
import { common } from '@kit.AbilityKit';
import { walletPass } from '@kit.WalletKit';
import { BusinessError } from '@kit.BasicServicesKit';
/**
* UWB 能力检测组件
* 用于检测设备是否支持超宽带(UWB)定位功能
*/
@Entry
@Component
struct UwbCheckComponent {
private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
// Wallet Pass 客户端实例
private walletPassClient: walletPass.WalletPassClient = new walletPass.WalletPassClient(this.context);
// 卡片类型:数字车钥匙
private passType: string = 'DigitalCarKey'; // ⚠️ 需替换为 AGC 平台申请的实际 Service ID // 目标设备类型:phone(手机)或 wear(穿戴设备)
private targetDeviceType: string = 'phone';
/**
* 组件初始化时创建 Wallet Pass 客户端
*/
aboutToAppear() {
const context = getContext(this) as common.UIAbilityContext;
this.walletPassClient = new walletPass.WalletPassClient(context);
}
/**
* 检测设备 UWB 支持情况
* @returns Promise<void>
*/
async checkUwbSupport() {
// 构造查询参数
const passStr = JSON.stringify({
passType: this.passType,
targetDeviceType: this.targetDeviceType
});
try {
// 调用查询接口
const result: string = await this.walletPassClient.queryPassDeviceInfo(passStr);
const resultObj: Record<string, string> = JSON.parse(result);
const capabilities = resultObj["deviceCapabilities"];
// 判断设备能力
if (capabilities === '0202') {
console.info('✅ 设备支持 UWB 超宽带定位');
// TODO: 执行 UWB 相关业务逻辑
} else {
console.error(`❌ 设备不支持 UWB,当前能力值:${capabilities}`);
this.handleFallback(capabilities);
}
} catch (err) {
const error = err as BusinessError;
console.error(`检测失败 - 错误码:${error.code},信息:${error.message}`);
this.handleError(error.code);
}
}
/**
* 处理降级方案
* @param capabilities 当前设备能力值
*/
private handleFallback(capabilities: string) {
switch (capabilities) {
case '0201':
console.info('降级使用 BLE 蓝牙定位');
break;
case '0200':
console.info('降级使用 NFC 近场通信');
break;
case '0203':
console.info('使用 SLE 低功耗定位');
break;
default:
console.error('未知的设备能力值');
}
}
/**
* 处理错误码
* @param errorCode 错误码
*/
private handleError(errorCode: number) {
switch (errorCode) {
case 1010200004:
console.error('设备硬件不支持该功能(可能无 UWB 芯片)');
break;
case 1010200001:
console.error('未申请 ACCESS_WALLET 权限');
break;
default:
console.error(`其他错误,错误码:${errorCode}`);
}
}
build() {
Column({ space: 20 }) {
Button('检测 UWB 支持')
.onClick(() => this.checkUwbSupport())
.width('80%')
.height(50)
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
三、配置要求
3.1 权限配置
在项目的 config.json 或 module.json5 中添加权限声明:
{
"reqPermissions": [
{
"name": "ohos.permission.ACCESS_WALLET",
"reason": "需要访问钱包服务检测设备能力"
}
]
}
3.2 系统版本要求
| 项目 | 最低版本 |
|---|---|
| HarmonyOS | 5.0+ |
| Wallet Kit | 10.0+ |
| API Level | 10+ |
四、关键注意事项
⚠️ 物理硬件依赖
UWB 功能需要设备搭载专用超宽带芯片,支持 UWB 的设备包括:
- 华为设备:Mate 40 系列及以上、P50 系列及以上
- Apple 设备:iPhone 11 及以上(需适配 HarmonyOS)
- 其他品牌:参考官方设备兼容性列表
⚠️ 参数配置
1. passType 参数:
- 必须与 AppGallery Connect(AGC)平台申请的 Service ID 一致
- 常见类型:
DigitalCarKey(数字车钥匙)、TransitCard(交通卡)等
2. targetDeviceType 参数:
phone:手机设备wear:可穿戴设备(如智能手表)
⚠️ 调试建议
- 真机测试:模拟器可能返回虚假能力值,务必在真机上测试
- 日志验证:通过 HiLog 查看完整的返回数据:
console.info('设备信息:' + result);
五、错误码参考
| 错误码 | 说明 | 解决方案 |
|---|---|---|
1010200001 |
未申请权限 | 在配置文件中添加 ACCESS_WALLET 权限 |
1010200004 |
设备不支持该功能 | 检查设备是否搭载 UWB 芯片,或使用降级方案 |
1010200002 |
参数错误 | 检查 passType 和 targetDeviceType 参数是否正确 |
1010200003 |
服务异常 | 稍后重试或联系技术支持 |
完整错误码列表请参考:Wallet Kit 错误码文档
六、降级方案
当设备不支持 UWB 时,可根据 deviceCapabilities 值选择替代技术:
/**
* 根据设备能力选择定位方案
* @param capabilities 设备能力值
*/
function selectLocationStrategy(capabilities: string): LocationStrategy {
switch (capabilities) {
case '0202':
return LocationStrategy.UWB; // 高精度定位(1-10cm)
case '0201':
return LocationStrategy.BLE; // 中等精度(1-5m)
case '0200':
return LocationStrategy.NFC; // 近距离触碰(<10cm)
case '0203':
return LocationStrategy.SLE; // 低功耗定位
default:
return LocationStrategy.FALLBACK; // 兜底方案
}
}
七、相关文档
更多关于HarmonyOS 鸿蒙Next中如何检测设备是否支持 UWB(超宽带)定位?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
搜索整理了一下,还没有实测,可以参考一下:
queryPassDeviceInfo 接口是 HarmonyOS 5.0.0 (12)+ 专属 Wallet Kit API,它的核心价值不仅是检测 UWB 支持性,更能直接关联数字车钥匙的「云侧卡券开通 + 设备能力绑定」,比原生 uwb 模块 API 更贴合你的数字车钥匙开发需求,以下是完整落地方案:
一、该接口的核心优势(针对数字车钥匙)
- 一站式检测:同时返回设备「UWB/NFC/BLE/SLE」能力,无需分别调用多个模块 API,数字车钥匙所需的无线能力可一次性确认;
- 关联云侧安全:返回
passDeviceId(账号 / 设备联合标识符),可直接用于后续数字车钥匙的开卡和云侧绑定,提升安全性; - 贴合车钥匙流程:
deviceCapabilities直接返回标准化能力编码,无需额外解析,可直接对接车厂的设备兼容性校验逻辑; - 元服务兼容:从 API 12 开始支持元服务调用,数字车钥匙元服务可直接集成,无需单独开发应用。
二、前置准备(必须步骤,否则接口调用失败)
1. 申请 AGC Wallet Kit 服务号(passType 来源)
- 登录 华为应用市场连接平台(AGC);
- 进入「Wallet Kit」→「服务管理」→「创建服务」,填写数字车钥匙相关信息,审核通过后获取
passType(服务号,字符串格式,如「hw_car_key_xxx」); - 配置应用包名与签名,确保与鸿蒙项目的
bundleName和签名一致。
2. 集成 Wallet Kit 依赖(鸿蒙项目)
在项目的 oh-package.json5 中添加 Wallet Kit 依赖:
{
"dependencies": {
"@ohos/wallet": "^5.0.0" // 适配 API 12(HarmonyOS 5.0.0(12))
}
}
执行安装命令:
ohpm install
3. 配置系统能力与权限(module.json5)
该接口依赖 SystemCapability.Payment.Wallet 系统能力,且需声明网络权限(用于云侧查询):
{
"module": {
"name": "entry",
"type": "entry",
"requestPermissions": [
{
"name": "ohos.permission.INTERNET", // 云侧查询必需
"usedScene": { "abilities": [".MainAbility"], "when": "always" }
}
],
"deviceCapability": [
"SystemCapability.Payment.Wallet" // 声明 Wallet Kit 系统能力
]
}
}
三、完整代码实现(ETS,适配 HarmonyOS 5.0.0 (12)+)
import wallet from '@ohos.wallet';
import promptAction from '@ohos.promptAction';
import { BusinessError } from '@ohos.base';
// 1. 配置核心参数(替换为你从 AGC 申请的 passType)
const AGC_PASS_TYPE = "hw_car_key_xxx"; // 你的 Wallet Kit 服务号
const TARGET_DEVICE_TYPE = "phone"; // 目标设备类型:phone/wear/all
// 2. 构造 passStr 参数(必须为 JSON String 格式)
function buildPassStr(): string {
const passObj = {
passType: AGC_PASS_TYPE,
targetDeviceType: TARGET_DEVICE_TYPE
};
return JSON.stringify(passObj);
}
// 3. 调用 queryPassDeviceInfo 检测 UWB 及设备能力(数字车钥匙专用)
async function checkUwbForCarKeyByWalletKit() {
try {
const passStr = buildPassStr();
// 调用 Wallet Kit 接口查询设备能力
const resultStr = await wallet.queryPassDeviceInfo(passStr);
// 解析返回结果(JSON String 转对象)
const deviceResult = JSON.parse(resultStr);
// 4. 提取核心信息,重点判断 UWB 支持性
const {
deviceType, // 设备类型:phone/wear
passDeviceId, // 账号/设备联合标识符(后续车钥匙绑定用)
deviceModel, // 设备名(如 Pura 70 Ultra)
deviceCapabilities // 设备能力集(核心:判断 UWB)
} = deviceResult;
// 5. 解读 deviceCapabilities:判断是否支持 UWB
const isUwbSupported = deviceCapabilities.includes("0202"); // UWB 对应编码:0202
const isNfcSupported = deviceCapabilities.includes("0200"); // NFC 对应编码:0200
const isBleSupported = deviceCapabilities.includes("0201"); // BLE 对应编码:0201
// 6. 结果提示与后续处理(贴合数字车钥匙开发)
if (isUwbSupported) {
promptAction.showToast({
message: `当前设备支持 UWB(数字车钥匙必备),设备标识:${passDeviceId.slice(0, 8)}...`
});
console.log("数字车钥匙设备检测结果:", {
deviceModel,
isUwbSupported,
isNfcSupported,
isBleSupported,
passDeviceId
});
// 后续:携带 passDeviceId 调用车厂接口,开通数字车钥匙
this.openCarKeyWithDeviceId(passDeviceId);
} else {
promptAction.showToast({ message: "当前设备不支持 UWB,无法实现数字车钥匙无感解锁" });
console.log("设备能力集:", deviceCapabilities, "不包含 UWB 编码 0202");
}
} catch (e) {
const error = e as BusinessError;
console.error("调用 queryPassDeviceInfo 失败:", error.code, error.message);
promptAction.showToast({ message: "设备能力查询失败,请检查网络或 AGC 配置" });
}
}
// 4. 后续:携带设备标识开通数字车钥匙(示例)
async function openCarKeyWithDeviceId(passDeviceId: string) {
// 调用车厂/云侧接口,传入 passDeviceId 完成开卡
console.log("开始开通数字车钥匙,设备标识:", passDeviceId);
// 后续业务逻辑...
}
// 页面调用
@Entry
@Component
struct CarKeyUwbCheckPage {
build() {
Column() {
Button("检测设备能力(数字车钥匙专用)")
.backgroundColor("#007AFF")
.fontColor(Color.White)
.onClick(() => {
checkUwbForCarKeyByWalletKit();
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
四、关键结果解读(重点关注 deviceCapabilities)
deviceCapabilities 是数组格式,返回设备支持的无线能力编码,对应关系如下(数字车钥匙核心关注):
| 能力编码 | 对应能力 | 数字车钥匙作用 |
|---|---|---|
| 0200 | NFC | 传统车钥匙刷卡解锁 / 启动 |
| 0201 | NFC+BLE | 蓝牙无感连接 + NFC 备份 |
| 0202 | UWB | UWB 超宽带精准定位(无感解锁 / 靠近自动唤醒) |
| 0203 | SLE | 安全低功耗通信(车端与设备加密通信) |
核心判断逻辑
- 若
deviceCapabilities包含0202:设备支持 UWB,可实现数字车钥匙的 UWB 无感解锁 / 定位功能; - 若不包含
0202:设备无 UWB 硬件,仅能支持 NFC/BLE 版本的数字车钥匙,无法实现 UWB 相关功能。
五、与原生 uwb 模块 API 的选型对比(紧急调研参考)
| 检测方案 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
Wallet Kit queryPassDeviceInfo |
1. 一站式检测多无线能力;2. 返回设备安全标识,可直接对接云侧车钥匙;3. 贴合数字车钥匙业务流程 | 1. 需 AGC 申请服务号,配置复杂;2. 依赖网络(云侧查询);3. 仅支持 API 12+ | 优先选择:数字车钥匙开发(你的核心需求) |
原生 uwb 模块 API |
1. 无需云侧配置,本地调用即可;2. 无网络依赖,离线检测;3. 支持 API 9+,兼容性更广 | 1. 仅能检测 UWB,无法获取其他车钥匙所需能力;2. 无设备安全标识,需额外对接云侧 | 辅助选择:单纯批量检测设备 UWB 硬件,无需关联车钥匙业务 |
六、紧急调研注意事项(避坑点)
passType有效性:必须使用从 AGC 申请并审核通过的passType,测试用的临时服务号可能无法返回 UWB 能力结果;- 网络要求:该接口需要设备联网(访问华为 Wallet 云服务),离线环境下调用会失败,调研时需确保设备网络通畅;
- 系统版本严格匹配:仅支持 HarmonyOS 5.0.0 (12) 及以上版本(API 12),低版本设备调用会抛出「系统能力不支持」异常;
- 签名一致性:鸿蒙项目的签名必须与 AGC 配置的应用签名一致,否则会返回「权限不足」错误,无法获取设备能力;
- UWB 编码固定:
UWB对应的能力编码是0202,无需额外解析,直接判断数组是否包含该值即可,无其他变体编码。
总结(紧急调研落地优先级)
- 若你仅需快速确认设备是否支持 UWB:优先使用原生
uwb.isUwbSupported()API,无需复杂配置,本地离线即可获取结果; - 若你需调研数字车钥匙完整可行性:优先使用
queryPassDeviceInfo接口,可同时确认 UWB/NFC/BLE 能力,且获取后续开发所需的设备安全标识,一步到位; - 批量设备调研:可先通过「系统设置」快速筛查(HarmonyOS 5.0+ 「更多连接」→「UWB」),再通过上述接口精准验证,提升调研效率。
通过该接口,你不仅能确认设备 UWB 支持性,还能为后续数字车钥匙的开卡、绑定流程做好准备,完美贴合你的开发需求,无需额外二次调研。
看看这个https://developer.huawei.com/consumer/cn/doc/harmonyos-references/wallet-walletpass
queryPassDeviceInfo
支持设备Phone
queryPassDeviceInfo(passStr: string): Promise<string>
查询当前设备唯一标识及设备能力,用于关联已开通的云侧卡券,同时开卡过程可指定目标设备标识,提升安全性。
使用Promise异步回调。
不支持多线程调用。
**元服务API:**从版本5.0.0(12)开始,该接口支持在元服务中使用。
**系统能力:**SystemCapability.Payment.Wallet
**起始版本:**5.0.0(12)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| passStr | string | 是 | 要求JSON String格式,传入的字段以key-value的形式设置在JSON String中,并通过该参数传入。 key包括passType、targetDeviceType。 • passType:创建Wallet Kit服务时注册的服务号,需要开发者到华为AGC网站申请。 • targetDeviceType:目标设备类型。取值如下 • phone:手机 • wear:穿戴 • all:手机+穿戴 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<string> | Promise对象,JSON String格式,传出的字段以key-value的形式设置在数组类型的JSON String中,并通过该参数传出。 key包括deviceType、passDeviceId、deviceModel、passCapabilityVersion、deviceModelNumber、deviceCapabilities。 • deviceType:设备类型。取值如下 • phone:手机 • wear:穿戴 • passDeviceId:账号/设备联合标识符。 • deviceModel:设备名,用于展示可开通的设备名称。 • passCapabilityVersion:WalletKit开放能力版本号,用于版本兼容处理,初始为 1。 • deviceModelNumber:设备型号编码,用于获取匹配的标定数据。 • deviceCapabilities:能力集,同步返回是否支持NFC/BLE/UWB/SLE • NFC:0200 • NFC+BLE:0201 • UWB:0202 • SLE:0203 |
可通过 @ohos.uwb 检测:
import uwb from '@ohos.uwb';
const isSupported = uwb.isUwbSupported();
- 返回
true表示硬件支持(如 Mate 50 Pro、Mate X3); - 需在
module.json5声明"reqPermissions": ["ohos.permission.UWB_MANAGER"];
注意:UWB 功能需在「设置 > 安全 > UWB」中手动开启。
普通应用无法直接控制 UWB,需集成 Huawei Nearby Service Kit。
在HarmonyOS Next中,检测设备是否支持UWB功能,可以通过@ohos.connection模块中的hasCapability方法实现。具体使用connection.hasCapability('ohos.connection.capability.uwb')接口进行判断,返回值为布尔类型,true表示支持,false表示不支持。
在HarmonyOS Next中,可以通过@ohos.connection模块下的uwb子模块来检测设备是否支持UWB功能。
核心方法是使用uwb.isUwbSupported()接口。该接口返回一个布尔值(boolean),true表示设备支持UWB,false则表示不支持。
基本使用步骤如下:
-
导入模块:在代码文件顶部导入
uwb模块。import { uwb } from '@ohos.connection'; -
调用检测接口:在需要检测的地方(例如应用启动或功能入口)调用
isUwbSupported()方法。let isSupported = uwb.isUwbSupported(); console.log(`当前设备UWB支持状态: ${isSupported}`); -
根据结果执行逻辑:根据返回的结果决定是否启用或展示你的数字车钥匙相关功能。
if (isSupported) { // 设备支持UWB,可以继续初始化UWB会话、测距等后续流程 // 例如:开始扫描UWB标签或准备连接 } else { // 设备不支持UWB,需要向用户提示或隐藏相关功能 // 例如:显示“当前设备不支持UWB数字钥匙”的提示 }
重要说明:
- 权限声明:使用UWB相关功能,需要在项目的
module.json5配置文件中声明ohos.permission.UWB权限。"requestPermissions": [ { "name": "ohos.permission.UWB" } ] - 系统能力:此接口需要系统具备
SystemCapability.Communication.Uwb.Core能力。 - 异步考虑:
isUwbSupported()是同步接口。实际的UWB通信(如测距、数据传输)是异步操作,需要使用uwb.createUwbSession()等接口进行会话管理。
通过以上方法,你可以在代码中快速、准确地判断运行应用的设备是否具备UWB硬件能力,从而决定数字车钥匙功能的可用性。

