2

我们正在过滤我们对多个 MAC 地址的 BLE 扫描

List<ScanFilter> filters = new ArrayList<ScanFilter>();
for(String addr : mBleAddrs) {

                if(BluetoothAdapter.checkBluetoothAddress(addr)) {
                    Log.d(TAG, "VALID addr: " + addr);
                    ScanFilter deviceFilter = new ScanFilter.Builder()
                            .setDeviceAddress(addr)
                            .build();
                    filters.add(deviceFilter);
                } else {
                    Log.d(TAG, "INVALID addr: " + addr);
                }
}
mBluetoothLeScanner.startScan(filters, settingsBuilder.build(), mScanCallback);

在 Android 7 和 8 设备上运行它时,一切正常,但在带有 Android 版本 9 的 Google Pixel XL 上运行时,它根本不会产生任何结果。如果我删除过滤器,我会在该手机上获得结果。任何人都知道如何解决这个问题,或者某些手机根本不支持某些类型的过滤?

编辑要清楚,我们在屏幕打开的情况下在前台扫描!

4

1 回答 1

0

这可能是由于https://punchthrough.com/android-ble-guide/中提到的随机地址:

警告:实现蓝牙 4.2 的 LE 隐私功能的设备会定期随机化其公共 MAC 地址,因此通常不应将通过扫描获得的 MAC 地址用作识别设备的长期手段——除非固件保证它不是轮换 MAC 地址,或者如果它有一种带外方式来传达它当前的公共 MAC 地址是什么。

于 2021-07-08T20:17:48.653 回答