设备地址的BLE ScanFilter在Android 9(Google Pixel XL)上不起作用

时间:2019-02-12 09:18:55

标签: android filter bluetooth-lowenergy pixel

我们正在通过

在许多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上运行时,则完全不会产生任何结果。如果删除过滤条件,则可以在该电话上获得结果。有谁知道如何解决这个问题,或者某些手机根本不支持某些类型的过滤?

编辑请注意,我们正在打开屏幕在前台进行扫描!

1 个答案:

答案 0 :(得分:0)

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

<块引用>

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