2014-10-16 95 views
5

我有一個應用程序完成並準備發貨,它連接到我們已經制作的自定義藍牙外設。 但是我剛剛發現了一個應用程序的問題,我無法確定。Android藍牙低功耗有時會鎖定

我在Service中運行我所有的藍牙操作,有時當我想要藍牙操作結束時,我最終會連接1個外設,但我已經失去了所有指向它的指針。並且每隔一段時間,整個藍牙堆棧似乎都會鎖定,並且需要重新啓動手機。

我認爲在我停止掃描後嘗試清理任何連接的設備時會出現問題。 我有這樣的清理方法

private void clearAllDevices() { 
     Log.e(TAG, "Clear all devices"); 
     for (int i = 0; i < _connectedPeripherals.size(); i++) { 
      Log.e(TAG, "int i:" + i + " _connectedPeripherals size:" + _connectedPeripherals.size()); 
      BluetoothGatt gatt = (BluetoothGatt) _connectedPeripherals.get(i); 
      gatt.disconnect(); 
     } 
} 

但是我覺得有時候一個周是通過在同一時間連接從具有連接斷開一切一半。

是否有更好的方法來清理所有正在連接的設備或設備?

回答

5

bluetoothGatt.disconnect()是不夠的。您還應該致電bluetoothGatt.close()

一旦程序使用BLE裝置完成,它應該調用close()這樣系統就可以適當地釋放資源。

參見:API Guides > Bluetooth Low Energy

您可以通過BluetoothGattCallback.onConnectionStateChange回調檢查bluetoothGatt.disconnect()結果。

+0

謝謝。我將在明天回到原型時嘗試。我從來沒有見過close()在我讀過的任何教程中使用過。一旦斷開連接,我應該在onConnectionStateChange回調中調用close()嗎? – Darren 2014-10-20 06:46:55

+1

我在onConnectionStateChange報告成功斷開連接之後調用'close()'。 – Gyebro 2014-10-20 09:50:59

+0

這是現貨,現在一切似乎都更加穩定。謝謝 – Darren 2014-10-23 11:44:39