2017-06-19 2 views
1

Wir verwenden RxAndroidBle 1.3.1, um eine Verbindung zu BLE-Geräten von Android herzustellen. Auf bestimmten Telefonen (derzeit sehe ich das auf einem LG V20 [LG-H918], Android 7.0), nachdem unsere App die Verbindung getrennt hat, wird das Telefon weiterhin ohne Benutzereingaben verbunden.Android BLE verbindet im Hintergrund nach dem Trennen

Wenn wir unsere App schließen, wird das Gerät getrennt. Dann können wir unseren App-Prozess beenden. Etwa zwanzig Sekunden später wird das Telefon für etwa 2 Sekunden mit dem Gerät verbunden und dann getrennt. Dieses Verhalten wiederholt sich alle 10-20 Sekunden auf unbestimmte Zeit, bis wir das Telefon neu starten.

Tatsächlich erhalten wir sogar die wiederkehrenden Verbindungen, wenn wir die App hart töten, solange die Verbindung noch besteht.

Dies sind die Protokolle, wenn wir trennen:

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) 

Ich bin ratlos; jede Hilfe wird geschätzt!

+0

Könnten Sie Ihren Code und Protokolle aus der Anwendung auch zeigen? –

+0

Scheint mir wie ein Fehler in Android. – Emil

+0

Beitrag mit Protokollen bearbeitet. Der Code ist zu lang und involviert, aber nach der Trennung werden alle Abonnements von 'Observable 'abbestellt. –

Antwort

0

Der Täter ist Spotify Connect. Es überwacht, ob Bluetooth-Geräte getrennt werden können und versucht sofort, eine Verbindung herzustellen. Manchmal geht es in eine Endlosschleife, manchmal hört der Verbindungszyklus auf. Aber wir waren in der Lage, dieses verheerende Verhalten durch das Stoppen von SC zu beseitigen, und wir konnten es auf anderen Telefonen durch die Installation schaffen.

Siehe Android BLE unexpectedly and repeatedly reconnects to peripheral

0

Vergewissern Sie sich, wenn Sie das Gatt Profil von Ihrer App eine Verbindung haben Sie Auto-Flag auf false Von Android documentation für BLE gesetzt verbinden: -

Anschluss an einen GATT Server Der erste Schritt in der Interaktion mit einem BLE Das Gerät verbindet sich mit dem Server GATT auf dem Gerät. Um eine Verbindung zu einem GATT-Server auf einem BLE-Gerät herzustellen, verwenden Sie die Methode connectGatt(). Diese Methode nimmt drei Parameter: a Kontextobjekt, autoconnect (boolean angibt, ob auf automatisch, sobald der BLE Gerät zu verbinden, wie es verfügbar wird), und einen Verweis auf eine BluetoothGattCallback:

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

+0

Wenn Sie auf dem BluetoothGatt-Objekt ordnungsgemäß trennen(), dann hat es keinen Effekt, ob Sie Setzen Sie autoConnect auf wahr oder falsch. – Emil

+0

@Emil: Ich habe auf einen möglichen Fehler auf dem Remote-Stack hingewiesen - verursacht durch automatisches Verbinden in der App von OP - wollte das also ausschließen – Zakir

+0

Autoconnect ist falsch. Wie oben erwähnt, rufen Sie in RxAndroidBle nicht 'disconnect()' direkt auf; Stattdessen kündigen Sie die Rx Observables ab, die Interesse an dieser Verbindung angemeldet haben. –

0

Stellen Sie sicher, dass Sie close Methode aufgerufen haben.

close method

+0

Ich verwende RxAndroidBle Bibliothek; Sie rufen nicht 'close()' auf, Sie kündigen alle Observables ab, die mit dieser Verbindung zu tun haben.In der Tat, sehe ich die Trennung Radio-Betrieb in den Protokollen, so scheint es die Verbindung korrekt zu trennen. –