HarmonyOS 鸿蒙Next中如何检测设备是否支持 UWB(超宽带)定位?

HarmonyOS 鸿蒙Next中如何检测设备是否支持 UWB(超宽带)定位? 计划开发数字车钥匙功能,需确认设备硬件支持 UWB,应该如何检查检测 设备是否支持 UWB(超宽带)定位?着急调研确定能否执行~各位大佬

6 回复

A: 可通过 Wallet Kit 能力集的 queryPassDeviceInfo 接口实现设备 UWB 能力检测。


详细步骤过程

通过调用 walletPass.WalletPassClientqueryPassDeviceInfo 方法,传入设备类型参数,解析返回的 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.jsonmodule.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:可穿戴设备(如智能手表)

⚠️ 调试建议

  1. 真机测试:模拟器可能返回虚假能力值,务必在真机上测试
  2. 日志验证:通过 HiLog 查看完整的返回数据:
 console.info('设备信息:' + result);

五、错误码参考

错误码 说明 解决方案
1010200001 未申请权限 在配置文件中添加 ACCESS_WALLET 权限
1010200004 设备不支持该功能 检查设备是否搭载 UWB 芯片,或使用降级方案
1010200002 参数错误 检查 passTypetargetDeviceType 参数是否正确
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 更贴合你的数字车钥匙开发需求,以下是完整落地方案:

一、该接口的核心优势(针对数字车钥匙)

  1. 一站式检测:同时返回设备「UWB/NFC/BLE/SLE」能力,无需分别调用多个模块 API,数字车钥匙所需的无线能力可一次性确认;
  2. 关联云侧安全:返回 passDeviceId(账号 / 设备联合标识符),可直接用于后续数字车钥匙的开卡和云侧绑定,提升安全性;
  3. 贴合车钥匙流程deviceCapabilities 直接返回标准化能力编码,无需额外解析,可直接对接车厂的设备兼容性校验逻辑;
  4. 元服务兼容:从 API 12 开始支持元服务调用,数字车钥匙元服务可直接集成,无需单独开发应用。

二、前置准备(必须步骤,否则接口调用失败)

1. 申请 AGC Wallet Kit 服务号(passType 来源)

  1. 登录 华为应用市场连接平台(AGC)
  2. 进入「Wallet Kit」→「服务管理」→「创建服务」,填写数字车钥匙相关信息,审核通过后获取 passType(服务号,字符串格式,如「hw_car_key_xxx」)
  3. 配置应用包名与签名,确保与鸿蒙项目的 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 硬件,无需关联车钥匙业务

六、紧急调研注意事项(避坑点)

  1. passType 有效性:必须使用从 AGC 申请并审核通过的 passType,测试用的临时服务号可能无法返回 UWB 能力结果;
  2. 网络要求:该接口需要设备联网(访问华为 Wallet 云服务),离线环境下调用会失败,调研时需确保设备网络通畅;
  3. 系统版本严格匹配:仅支持 HarmonyOS 5.0.0 (12) 及以上版本(API 12),低版本设备调用会抛出「系统能力不支持」异常;
  4. 签名一致性:鸿蒙项目的签名必须与 AGC 配置的应用签名一致,否则会返回「权限不足」错误,无法获取设备能力;
  5. UWB 编码固定UWB 对应的能力编码是 0202,无需额外解析,直接判断数组是否包含该值即可,无其他变体编码。

总结(紧急调研落地优先级)

  1. 若你仅需快速确认设备是否支持 UWB:优先使用原生 uwb.isUwbSupported() API,无需复杂配置,本地离线即可获取结果;
  2. 若你需调研数字车钥匙完整可行性:优先使用 queryPassDeviceInfo 接口,可同时确认 UWB/NFC/BLE 能力,且获取后续开发所需的设备安全标识,一步到位;
  3. 批量设备调研:可先通过「系统设置」快速筛查(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则表示不支持。

基本使用步骤如下:

  1. 导入模块:在代码文件顶部导入uwb模块。

    import { uwb } from '@ohos.connection';
    
  2. 调用检测接口:在需要检测的地方(例如应用启动或功能入口)调用isUwbSupported()方法。

    let isSupported = uwb.isUwbSupported();
    console.log(`当前设备UWB支持状态: ${isSupported}`);
    
  3. 根据结果执行逻辑:根据返回的结果决定是否启用或展示你的数字车钥匙相关功能。

    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硬件能力,从而决定数字车钥匙功能的可用性。

回到顶部