2017-06-19 187 views
1

我們使用RxAndroidBle 1.3.1連接Android的BLE設備。在某些手機上(目前我在LG V20 [LG-H918],Android 7.0上看到這一點),在我們的應用程序斷開連接後,手機將繼續連接,無需任何用戶輸入。斷開連接後,Android BLE在後臺連接

當我們關閉我們的應用程序時,設備斷開連接。然後我們可以殺死我們的應用程序。大約20秒鐘後,手機重新連接至設備約2秒鐘,然後斷開連接。這種行爲無限期地每10-20秒重複一次,直到我們重新啓動手機。

實際上,如果我們在連接仍然存在的情況下強行殺死應用程序,我們甚至可以獲得重複連接。

這些日誌時,我們斷開:

06-21 10:51:07.464 26640-26640/com.hatchbaby.rest.qa I/Nightlight: [main] Disconnecting: Nightlight.disconnect() 
06-21 10:51:07.528 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: setCharacteristicNotification() - uuid: 02240003-5efd-47eb-9c1a-de53f7a2b232 enable: false 
06-21 10:51:07.538 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.539 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.543 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: setCharacteristicNotification() - uuid: 02260002-5efd-47eb-9c1a-de53f7a2b232 enable: false 
06-21 10:51:07.547 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.548 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDisconnect(160892126) 
06-21 10:51:07.562 26640-26640/com.hatchbaby.rest.qa I/Nightlight: [main] Nightlight state: RxBleConnectionState{DISCONNECTED} 
06-21 10:51:07.686 26640-26747/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onDescriptorWrite descriptor=00002902-0000-1000-8000-00805f9b34fb status=0 
06-21 10:51:07.688 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.689 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.783 26640-26746/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onDescriptorWrite descriptor=00002902-0000-1000-8000-00805f9b34fb status=0 
06-21 10:51:07.786 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.787 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDisconnect(160892126) 
06-21 10:51:07.787 26640-26640/com.hatchbaby.rest.qa D/BluetoothManager: getConnectionState() 
06-21 10:51:07.787 26640-26640/com.hatchbaby.rest.qa D/BluetoothManager: getConnectedDevices 
06-21 10:51:07.793 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: cancelOpen() - device: E5:D6:FC:68:FB:55 
06-21 10:51:07.797 26640-26653/com.hatchbaby.rest.qa D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=E5:D6:FC:68:FB:55 
06-21 10:51:07.797 26640-26653/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onConnectionStateChange newState=0 status=0 
06-21 10:51:07.803 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: close() 
06-21 10:51:07.803 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: unregisterApp() - mClientIf=6 
06-21 10:51:07.807 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDisconnect(160892126) 

我感到莫名其妙;任何幫助表示讚賞!

+0

您可以顯示您的代碼和日誌從應用程序? –

+0

在Android中看起來像是一個bug。 – Emil

+0

用日誌編輯的帖子。代碼太長並涉及到,但是在斷開連接時,我們將所有訂閱取消訂閱到'Observable '。 –

回答

0

罪魁禍首是Spotify的連接。它監視任何斷開的藍牙設備並立即嘗試連接到它。有時會進入無限循環,有時連接週期最終會停止。但是我們可以通過停止SC來擺脫這種破壞性行爲,並且我們可以通過安裝SC來使其發生在其他手機上。

另請參見Android BLE unexpectedly and repeatedly reconnects to peripheral

0

確保當您從您的應用與關貿總協定的個人資料,你有自動連接標誌設置爲false從Android的documentation的BLE: -

連接到GATT服務器與BLE 交互的第一步設備連接到它 - 更具體地說,連接到設備上的GATT 服務器。要連接到BLE設備上的GATT服務器,您使用connectGatt()方法 。此方法採用三個參數: 上下文對象,AUTOCONNECT(布爾值,指示是否 當它變得 可用立即自動連接到BLE設備),以及一個BluetoothGattCallback的引用:

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

+0

如果你正確調用斷開連接()在BluetoothGatt對象然後它不起作用,無論你將autoConnect設置爲true或false。 – Emil

+0

@Emil:我暗示了遠程堆棧上的潛在錯誤 - 由OP應用程序中的自動連接引起 - 所以我想排除這種情況 – Zakir

+0

Autoconnect是錯誤的。如上所述,在RxAndroidBle中,您不直接調用disconnect();而是取消訂閱註冊該連接的Rx Observables。 –

0

確保你叫close方法。

close method

+0

我正在使用RxAndroidBle庫;你實際上不調用'close()',你將取消訂閱與該連接有關的所有Observable。實際上,我在日誌中看到斷開無線電操作,因此它似乎正確斷開連接。 –