我们正在制作一个使用BLE广告的应用程序,首先创建我们的工业设备列表。然后当然会发生其他事情,但这与问题无关。重要的是我们需要不断收到BLE广告。
有一个类似服务的对象开始扫描,等待大约2秒然后停止它。 500毫秒后再次启动。 这种情况持续不断。
下面是开始扫描的代码段,为了完整性,只需标准代码,如下所示:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
bluetoothLeScanner.startScan(null, new ScanSettings.Builder().
setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(0)
.build(), bleScannerCallback);
ok = true;
} else {
ok = mBluetoothAdapter.startLeScan(bleScannerCallbackPreLollipop);
}
return ok;
bleScannerCallback实现回调以接收onScanResult()
。
我现在所经历的是:
使用某些设备,例如带有Android 5.1.1的Samsung S6,在每个扫描周期内,接收所有邻近设备,即onScanResult()
与所有BLE广告一起运行。
使用其他设备,例如平板电脑Nexus 9和Android 7.0,一切运行正常约20秒,然后约17/18秒没有广告通过onScanResult()
传送,然后再次确定约20秒,然后又休息了大约17/18秒。
这个过程无限重复,即使有一定的规律性,它甚至看起来都不随意......
这是一个已知问题吗? 它似乎特别适用于Android> = 6,我们的三星S6与Android 5.1.1一直运行完美。
显然,所有必需的Android权限都已到位,其他地方甚至不会运行一次。
在我看来,更多的是"功能"在Android设备上节省一些电池,不幸的是我们需要连续扫描,至少在某些情况下,不是真的24/7,但即使没有每20秒休息约20秒。
如果这是将来的方式,有没有人知道任何其他允许连续扫描BLE设备的解决方案?独立于Android版本...无论如何较新的版本,如> = 6。