HarmonyOS 鸿蒙Next BLE低功耗蓝牙扫描设备ID变动问题

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next BLE低功耗蓝牙扫描设备ID变动问题

现在就是h5端会给我一个deviceId就是蓝牙地址去连接指定蓝牙,如下图

cke_1489.png

cke_15056.png

但是怎么也连接不了,然后我自己对设备进行了扫描,发现扫描到的那个蓝牙设备地址和给我的蓝牙地址不一致,我查阅文档后发现鸿蒙端的蓝牙地址会动态变化的,那么我该怎么根据给我的地址去连接指定蓝牙呢,毕竟蓝牙地址不一致,根本连接不上。

6 回复
问题解决了么?

你好,可以参考下面的帖子:https://developer.huawei.com/consumer/cn/forum/topic/0203153618195564024?fid=0109140870620153026

方案一:通过设备广播截取 扫描设备的时候可以获取设备的广播数据,设备的 mac地址一般包含在特定位置,

  /**
   * 通过广播数据获取血糖设备mac
   * [@param](/user/param) data
   * [@returns](/user/returns) FF-FF-11-57-B6-5B
   */
  getMac(data: ArrayBuffer) {
    //  1. Uint8Array处理二进制(高效)
    const arr = new Uint8Array(data).slice(6, 12)
    let mac = ''
    // 2. 转换 16 进制
    arr.forEach((item, i) => {
      mac += i === 0 ? '' : '-'
      mac += item.toString(16)
        .padStart(2, '0')
        .toUpperCase()
    })
    return mac
  }
 

方案二:通过给设备名称添加标识 falg 方式匹配,核心代码如下:

      const validDevices = devices.filter(dv => {
        if (scanFilter.type === 'mac') {
          let flag: boolean
          if (!scanFilter.door) {
            // 广播匹配
            flag = this.getMac(dv.data) === scanFilter.value
          } else {
            // 名称 falg匹配
            flag = this.isMatchDoor(scanFilter.value, dv.deviceName)
          }
          return list.some(item => item.deviceId === dv.deviceId) === false && flag
        } else {
          return list.some(item => item.deviceId === dv.deviceId) === false &&
          dv.deviceName.startsWith(scanFilter.value)
        }
      })
 
官方文档解释:基于信息安全考虑,此处获取的设备地址为随机MAC地址。配对成功后,该地址不会变更;已配对设备取消配对后重新扫描或蓝牙服务下电时,该随机地址会变更。
言外之意:不同的两个端的蓝牙(H5页面端和手机端)去连接另外的蓝牙(物联网设备蓝牙模块)蓝牙模块分配给到不同设备之间的地址是随机的,那必然是不一样的。你自己可以尝试用3台手机同时开启蓝牙做测试看看,手机1和手机2同时去连手机3的蓝牙,配对成功之前会分配一个配对码,这两个配对码是不一样的。所以,解决这个蓝牙连接问题的关键是:你这种通过H5给你的蓝牙地址去用客户端连接,这个方向就是错的!H5扫描到的地址(配对码)是H5与蓝牙设备之间的配对码;你想通过你的手机端拿着H5给你的蓝牙设备地址肯定是连不通的,因为蓝牙设备根本就不认识你。你应该是哪个端要去连接蓝牙设备就用哪个端去扫描它!

可能我说的不太清楚,不是h5和手机端两个端,就是鸿蒙原生基座内嵌web组件h5页面,实际上就是鸿蒙原生连接蓝牙,h5给的蓝牙地址是没错的,只是官方处于隐私考虑会动态变化蓝牙地址,官方给的建议是采用设备名称进行设备比对,然后拿到该设备的地址进行连接

还有个误区要解释一下,几个手机扫描到的蓝牙同一时间地址都是一样的,只是过几小时会动态改变mac地址

针对HarmonyOS 鸿蒙Next BLE低功耗蓝牙扫描设备ID变动问题,这通常是由于系统出于信息安全考虑,返回的是随机MAC地址。配对成功后,该地址不会变更;已配对设备取消配对后重新扫描或蓝牙服务下电时,该随机地址会变更。

为了解决这个问题,开发者可以采取以下措施:

  1. 通过设备广播截取:扫描设备时获取设备的广播数据,设备的MAC地址一般包含在特定位置,可以通过解析广播数据来获取真实的MAC地址。
  2. 通过设备名称进行匹配:如果设备名称具有唯一性,可以通过设备名称来进行设备匹配,避免使用易变的设备ID。

此外,还可以考虑使用其他唯一标识符,如Service UUID等,来进一步确认设备身份。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部