Android BLE广告并不总是发送到onScanResult()

时间:2017-01-12 21:09:49

标签: android bluetooth-lowenergy

我们正在制作一个使用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。

0 个答案:

没有答案