android-使用BluetoothLeScanner扫描同一设备多次调用onScanResult

我正在使用android上的BLE实现一个简单的广告扫描功能,由于某种原因,我通过相同的设备收到了很多对onScanResult回调的调用.

对于广告:

//Advertise settings build
AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder();
builder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);
builder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);
builder.setConnectable(true);

AdvertiseSettings advSettings = builder.build();

//Advertise data build
AdvertiseData.Builder advDataBuilder = new AdvertiseData.Builder();
advDataBuilder.addServiceUuid(ParcelUuid.fromString(SFGattAttributes.SERVICE));

AdvertiseData advertiseData = advDataBuilder.build();

//Start Advertising
bluetoothLeAdvertiser.startAdvertising(advSettings, advertiseData, advertiseData, new BLEAdvertiserCallback());

扫描:

BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
bluetoothLeScanner.startScan(getScanFilters(), getScanSettings(), new BLEScanCallback());

每次唯一的差异似乎是rssi值的差异.

有办法避免这种多次通话吗?

最佳答案
这实际上是一项功能,可以用于(广告)BLE设备.还有(较旧的)设备在扫描周期内没有获得特定设备的多次扫描结果.然后,这会导致测距其他设备(包括BLE信标)的问题.多次呼叫还会使您(随着时间的流逝)知道设备仍然可以访问/访问.

因此,如果您不想多个呼叫,只需忽略对已知设备(MAC地址)的呼叫.无法将其禁用.

请记住,许多设备(尤其是电话)会更改其mac地址.有些甚至每2分钟一次.将新的mac地址映射到旧设备(旧的mac地址)并不容易.您必须相应地处理该行为.

转载注明原文:android-使用BluetoothLeScanner扫描同一设备多次调用onScanResult - 代码日志