我无法找到BLE 直接广告的实际扫描在Android上的工作方式。我唯一发现的是here告诉您应将要扫描的设备MAC地址添加到ScanFilter
List<ScanFilter> mFilters = new ArrayList<ScanFilter>();
ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
mFilters.add(new ScanFilter.Builder().setDeviceAddress(new String("00:11:22:33:44:55")).build());
然后在此处添加此过滤器
le_scanner.startScan(mFilters, settings, le_scan_callback);
这在我的Android Lollipop上完美运行-我可以在创建bond之前和之后找到设备。现在,当我在Android Nougat和Oreo上尝试此操作时,它只能在创建绑定之前起作用-创建绑定并开始直接广告le_scan_callback
时,永远不会调用。是的,我确实请求了运行时权限:ACCESS_COARSE_LOCATION
和ACCESS_FINE_LOCATION
,并启用了位置服务。我在扫描中做错什么了吗?
我还使用PlayStore中的应用程序测试了对BLE模块的扫描:BLE Reader和nRF Connect,行为是相同的-在Lollipop上绑定之前和之后都有效,但是在Nougat和Oreo上绑定之后却没有效果。