2014-09-22 56 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