HarmonyOS鸿蒙Next中Ble扫描,scanResult中deviceId为空字符串

HarmonyOS鸿蒙Next中Ble扫描,scanResult中deviceId为空字符串

我能正确扫描到设备,但是在部分机器上,回调得到的数据中,result.deviceId是个空字符串,result.data是可以正确获取的。

为什么会出现这样的情况?我现在缺少deviceId,无法建立连接了。

我试过其它人说的从result.data中特定字段解析mac地址,但是似乎我们的协议栈有过修改。解析出来的结果并不是正确的mac,无法连接。

此问题只在部分机器上出现。

4 回复

同一批硬件,扫描出来有的deviceId空,有的deviceId不空,就很奇怪

更多关于HarmonyOS鸿蒙Next中Ble扫描,scanResult中deviceId为空字符串的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


头疼得很,我自己的测试机是能够正确获得deviceId的,但是作为sdk提供给客户后,他那边扫到的deviceId就是空的了。

在HarmonyOS Next中,Ble扫描返回的scanResultdeviceId为空字符串是正常现象。这是鸿蒙蓝牙子系统设计实现,deviceId默认不通过扫描结果公开。实际设备标识需要通过建立连接后,通过getDeviceId()获取。鸿蒙的蓝牙API设计与Android不同,不依赖扫描阶段获取完整设备信息。若需识别设备,建议使用deviceNamemacAddress字段(需定位权限)。该行为是系统级限制,非代码实现问题。

在HarmonyOS Next中,BLE扫描结果中deviceId为空字符串的问题通常与设备隐私保护机制相关。部分机型(特别是较新版本)会默认启用随机MAC地址功能,导致系统无法获取真实物理地址。

可能原因:

  1. 设备开启了MAC地址随机化功能
  2. 部分厂商定制ROM对BLE扫描做了特殊处理
  3. 设备未正确广播设备标识信息

建议解决方案:

  1. 优先使用result.getDevice()获取BluetoothDevice对象进行连接
  2. 检查设备蓝牙设置中是否启用了"使用随机MAC地址"选项
  3. 对于必须依赖deviceId的场景,可以考虑通过服务UUID或自定义广播数据来识别设备

注意:从系统安全角度考虑,依赖固定MAC地址进行设备识别的方式在新版本系统中会逐渐被限制。

回到顶部