gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:51 25 4
gpt4 key购买 nike

我正在 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36296769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com