Android蓝牙LE扫描在后台有不同的行为

时间:2014-09-22 04:05:41

标签: android android-service bluetooth-lowenergy ibeacon

我正在开发一款应用程序,可以扫描某些智能蓝牙LE标签,以检查标签何时超出范围。

当我在前台运行代码时,我每秒从每个标签获取一个信号。但在后台(如在服务中扫描),这个速率每10秒减少到1个信号!

我几乎可以肯定智能标签的频率在两种情况下都是相同的,但是当扫描发生在后台时,由于电池问题,Android操作系统可能会减慢发现蓝牙设备的速度。

我担心这会让人不满意,特别是当你需要检测到一个行李被盗或者是一些关键的东西时,会迫使我每3秒左右保持1个信号的速度。

更新

对于我使用的代码,首先:

private BluetoothAdapter bluetoothLeAdapter;

用于开始扫描:

bluetoothLeAdapter.startLeScan(LeScanCallback);

这是回调:

private BluetoothAdapter.LeScanCallback LeScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {

        Log.i("Found: ", device.getName() + " - " + device.getAddress());
    }
};

1 个答案:

答案 0 :(得分:0)

Android 4.3和4.4不会在后台减慢发现速度。在Android Beacon Library中,当应用程序处于后台时,我不得不加入额外的代码来减慢扫描速度以节省电量。

我无法解释你所说的你所看到的。也许你应该尝试上面提到的库,看看你是否看到了相同的行为。它是开源的,所以你也可以查看代码。它的扫描方式与您问题中的摘录中的扫描方式相同。