Android BLE扫描过滤器几秒内返回同一设备多个MAC匹配结果,预期行为是什么?
Bluetooth LE扫描多次返回同一设备结果是否正常?
我查阅的文档里没明确说明Bluetooth LE扫描的预期行为。我们要找某一特定设备,当用名称或MAC作为扫描条件时,会得到数十条匹配结果——这是设备多次广播、RSSI变化导致的正常现象吗?
我的扫描代码如下:
ArrayList<ScanFilter> filter = new ArrayList<ScanFilter>(); filter.add(new ScanFilter.Builder().setDeviceAddress("24:XX:XX:XX:XX:XX").build()); ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); bluetoothLeScanner.startScan(filter, settings, leScanCallback); // 5秒内返回了34条结果
这完全是正常现象,核心原因有两点:
- BLE设备本身就是周期性广播的,默认情况下设备会每隔几百毫秒发送一次广播包,扫描过程中自然会多次捕获到同一设备的广播信号。
- 即使是同一设备的广播,每次捕获到的RSSI(信号强度)可能不同,系统会把每次接收到的广播都作为独立结果返回给回调,哪怕设备地址或名称完全一致。
另外你使用的SCAN_MODE_LOW_LATENCY扫描模式会让系统分配更多资源用于高频扫描,灵敏度更高,这也会进一步增加捕获到的同一设备广播次数。
如果想避免重复处理同一设备,可以在回调里自行实现去重逻辑:比如记录最近一次处理该设备的时间间隔,或者只保留RSSI最强的结果,具体根据业务需求调整即可。
内容的提问来源于stack exchange,提问作者Riker
相关产品推荐
相关产品推荐

