微信小程序 BLE 扫描变慢与 allowDuplicatesKey 排查
今天在做微信小程序获取蓝牙权限 ble 扫描对应的无线设备时,发现一个这样的情况,我初次启动小程序扫描蓝牙是很快能扫描到,也能很快建立连接,但是我一旦断开蓝牙,重新打开,我就发现这个扫描无线设备非常缓慢,一直处于扫描中的状态。我就不是很明白,为什么会这样。于是我上网查了一下“UniApp 开发微信小程序蓝牙通信”的问题。我就找到了一篇参考文章
参考文章:wx66ece9f42611c - UniApp 开发微信小程序蓝牙通信:从流程到避坑
看到了一个关键数据“allowDuplicatesKey”,我在代码中是设置的 false,我就在想是不是这个问题,但是我问了 GPT,它说是跟这个参数无影响,
allowDuplicatesKey: false 只是表示本次扫描中同一个设备不重复回调。 它不会导致“第一次连接过的设备以后扫描不到”。 但是我想了想,还是死马当活马医,我改一下试试看。
// 持续扫描:开启后不会自动停止,需显式 stopDiscovery() export async function startDiscovery(onDeviceFound = null, options = {}) { uni.onBluetoothDeviceFound(res => { emitScannedDevices(res.devices, onDeviceFound, options, sid); }); await startDiscovery(onDeviceFound, { allowDuplicatesKey: true, // 允许重复上报同一设备(保持信号更新) scanWithServiceFilter: false, interval: 0, restartDelayMs: 300, // 停旧扫描后等 300ms 再启 cacheRefreshDelayMs: 1200 // 启动后 1.2s 再读一次缓存 }) 我发现改成了 true 后居然解决了这个问题,我就很好奇,claude 给出的回答是这样的