HarmonyOS 鸿蒙Next API2蓝牙扫描,在扫描结果过滤策略集合中设置serviceUuid,扫描不出任何结果,请问有人遇到过同样的问题吗?
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替换成我们自己定义的,扫描不到蓝牙设备
返回的数据中有一个Uint8Array类型的数据,里面包含了serviceUuid,这个数据需要自己根据蓝牙的空口包结构 - PDU协议进行解析。
安卓有一个应用叫:ble调试助手,它里面有解析的数据结构,你可以下载下来研究一下,uint8array返回的数据是10进制的,要转成16进制。
在BLE扫描蓝牙设备时,满足过滤条件的设备是会被排除掉的。通过使用ScanFilter
参数,可以设置过滤条件来筛选扫描结果,例如过滤特定的设备地址、设备名、服务UUID等。这些过滤条件会导致相应的设备不被返回。
建议设置 null
获取服务 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。