2014-09-22 58 views
0

我正在开发一个应用程序,以保持扫描某些智能蓝牙LE标签来检查标签超出范围。Android的蓝牙LE扫描在背景中有不同的行为

当我在前台运行我的代码时,每秒收到一个信号。但是在后台(比如在服务中扫描),这个速率每10秒就会下降到1个信号!

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

恐怕这并不令人满意,特别是当你需要检测一个包被偷走或者某些关键因素迫使我保持​​每3秒左右1个信号的速率。

UPDATE:

对于我使用的代码,第一:

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()); 
    } 
}; 
+0

你能分享你的扫描码吗?如果编码正确,我认为这不应该在后台工作。 – davidgyoung 2014-09-22 08:52:58

+0

@davidgyoung请参阅更新。 – 2014-09-22 09:07:44

回答

0

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

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

+0

它是权衡,电池与准确性。无论如何,我会试试图书馆,告诉你我得到了什么。谢谢。 – 2014-09-23 03:56:28