HarmonyOS 鸿蒙Next API2蓝牙扫描,在扫描结果过滤策略集合中设置serviceUuid,扫描不出任何结果,请问有人遇到过同样的问题吗?

发布于 1周前 作者 gougou168 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next API2蓝牙扫描,在扫描结果过滤策略集合中设置serviceUuid,扫描不出任何结果,请问有人遇到过同样的问题吗?

import { AsyncCallback, BusinessError } from ‘@kit.BasicServicesKit’;
function onReceiveEvent(data: Array<ble.ScanResult>) {
console.info('BLE scan device find result = '+ JSON.stringify(data));
}
try {
ble.on(“BLEDeviceFind”, onReceiveEvent);
let scanFilter: ble.ScanFilter = {
deviceId:“XX:XX:XX:XX:XX:XX”,
name:“test”,
serviceUuid:“00001888-0000-1000-8000-00805f9b34fb”
};
let scanOptions: ble.ScanOptions = {
interval: 500,
dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
}
ble.startBLEScan([scanFilter],scanOptions);
} catch (err) {
console.error('errCode: ’ + (err as BusinessError).code + ', errMessage: ’ + (err as BusinessError).message);
} 

以上是官方示例,将serviceUuid替换成我们自己定义的,扫描不到蓝牙设备

7 回复
楼主,scanFilter设为null,你搜到的设备如何获取到serviceUuid?

返回的数据中有一个Uint8Array类型的数据,里面包含了serviceUuid,这个数据需要自己根据蓝牙的空口包结构 - PDU协议进行解析。

安卓有一个应用叫:ble调试助手,它里面有解析的数据结构,你可以下载下来研究一下,uint8array返回的数据是10进制的,要转成16进制。

在BLE扫描蓝牙设备时,满足过滤条件的设备是会被排除掉的。通过使用ScanFilter参数,可以设置过滤条件来筛选扫描结果,例如过滤特定的设备地址、设备名、服务UUID等。这些过滤条件会导致相应的设备不被返回。

建议设置 null

但是,我们只设置了一个serviceUuid,所有的蓝牙设备都扫描不出来了,感觉像是底层的一个bug;我们现在打算先扫描出所有的蓝牙设备再进行过滤,又卡在另外一个问题,扫描出来的蓝牙列表数据中没有serviceUuid这个字段,也就是就是这个回调中返回的数据data中: ```function onReceiveEvent(data: Array<ble.ScanResult>) { console.info('BLE scan device find result = '+ JSON.stringify(data)); }``` 请问你知道么?我们的需求是,app中只展示我们定义的serviceUuid蓝牙设备列表。

获取服务 id 需要扫到设备连接上设备,才能发现服务过滤的 参见:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-bluetooth-ble-V5#getservices

在HarmonyOS鸿蒙Next API2蓝牙扫描中,设置serviceUuid进行过滤可能导致无法扫描到任何结果,这可能是由于API实现或设备兼容性问题。建议检查API文档和开发者社区,确认serviceUuid过滤的正确使用方式及是否存在已知问题。同时,尝试先扫描所有设备再过滤,看是否能获取到预期的结果。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部