-2

Ich arbeite an Android BLE mit RxAndroidBle-Bibliothek. Das BLE-Gerät hat eine Zeitüberschreitung von 5 Minuten, wenn keine Interaktion stattfindet. h. Das Gerät wird automatisch getrennt, wenn 5 Minuten lang keine Lese-/Schreibvorgänge ausgeführt werden. Ich erhalte BleGattException, wenn die Zeitüberschreitung auftritt.Android BLE verbindet sich nach BLE-Geräte-Timeout NICHT wieder [Verwenden von RxAndroidBle]

 W/System.err: BleGattException{macAddress=24:71:89:FE:A0:88, status=19 (0x13 -> https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.1.0_r1/stack/include/gatt_api.h), bleGattOperationType=BleGattOperation{description='CONNECTION_STATE'}} 
W/System.err:  at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.propagateStatusErrorIfGattErrorOccurred(RxBleGattCallback.java:233) 
W/System.err:  at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.access$200(RxBleGattCallback.java:35) 
W/System.err:  at com.polidea.rxandroidble.internal.connection.RxBleGattCallback$3.onConnectionStateChange(RxBleGattCallback.java:86) 
W/System.err:  at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:228) 
W/System.err:  at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:70) 
W/System.err:  at android.os.Binder.execTransact(Binder.java:453) 

W/BluetoothGatt: Unhandled exception in callback 
                    rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError 
                     at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:194) 
                     at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) 
                     at rx.observers.Subscribers$5.onError(Subscribers.java:230) 
                     at rx.observers.Subscribers$5.onError(Subscribers.java:230) 
                     at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) 
                     at rx.observers.Subscribers$5.onError(Subscribers.java:230) 
                     at rx.observers.Subscribers$5.onError(Subscribers.java:230) 
                     at rx.observers.Subscribers$5.onError(Subscribers.java:230) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
                     at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
                     at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
                     at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
                     at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
                     at rx.internal.operators.NotificationLite.accept(NotificationLite.java:132) 
                     at rx.subjects.SubjectSubscriptionManager$SubjectObserver.emitNext(SubjectSubscriptionManager.java:253) 
                     at rx.subjects.BehaviorSubject.onError(BehaviorSubject.java:141) 
                     at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.propagateStatusError(RxBleGattCallback.java:241) 
                     at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.propagateStatusErrorIfGattErrorOccurred(RxBleGattCallback.java:233) 
                     at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.access$200(RxBleGattCallback.java:35) 
                     at com.polidea.rxandroidble.internal.connection.RxBleGattCallback$3.onConnectionStateChange(RxBleGattCallback.java:86) 
                     at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:228) 
                     at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:70) 
                     at android.os.Binder.execTransact(Binder.java:453) 
                    Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError 
                     at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:187) 
                     at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) 
                     at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:216) 
                     at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:139) 
                     at rx.internal.operators.OperatorDistinctUntilChanged$1.onNext(OperatorDistinctUntilChanged.java:96) 
                     at rx.internal.operators.NotificationLite.accept(NotificationLite.java:135) 
                     at rx.subjects.SubjectSubscriptionManager$SubjectObserver.emitNext(SubjectSubscriptionManager.java:253) 
                     at rx.subjects.BehaviorSubject.onNext(BehaviorSubject.java:160) 
                     at com.polidea.rxandroidble.internal.RxBleDeviceImpl$1$1.call(RxBleDeviceImpl.java:77) 
                     at rx.subscriptions.BooleanSubscription.unsubscribe(BooleanSubscription.java:71) 
                     at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
                     at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 

Sobald das Gerät trennt aufgrund Timeout, wenn ich wieder scannen konnte ich das Gerät in der Nähe von verfügbaren Geräten findet, wie erwartet. Aber wenn ich auf das gleiche Gerät zu verbinden versuche, wirft es ein Gerät Ausnahme telling bereits

W/System.err: BleAlreadyConnectedException{macAddress=24:71:89:FE:99:E3} 
W/System.err:  at com.polidea.rxandroidble.internal.RxBleDeviceImpl.lambda$establishConnection$3(RxBleDeviceImpl.java:54) 
W/System.err:  at com.polidea.rxandroidble.internal.RxBleDeviceImpl$$Lambda$1.call(Unknown Source) 
W/System.err:  at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) 
W/System.err:  at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) 
W/System.err:  at rx.Observable.subscribe(Observable.java:10236) 
W/System.err:  at rx.Observable.subscribe(Observable.java:10203) 
W/System.err:  at rx.Observable.subscribe(Observable.java:10043) 

verbunden ist, aber ich bin in der Lage an das Gerät angeschlossen werden, wenn aus- und wieder einschalten Bluetooth in meinem Handy oder wenn ich Töte die App und starte neu.

Und erneut verbinden funktioniert, wenn ich das Gerät manuell trennen und erneut verbinden. Das Problem tritt nur auf, wenn eine Zeitüberschreitung auftritt.

Kann mir jemand sagen, warum passiert das?

Antwort

0

Aus dem Fehler und der Implementierung der .establishConnection()-Funktion zu urteilen, melden Sie sich nicht von der vorherigen Observable ab, die zurückgegeben wurde.

Sobald Sie sich von der vorherigen abmelden, sollten Sie in der Lage sein, eine neue Verbindung herzustellen.

+0

Danke für die Informationen @s_noopy. Aber ich bin bereits vor der nächsten Verbindung abbestellen. Und das erneute Verbinden funktioniert, wenn ich das Gerät manuell abkopple und erneut verbinde. Das Problem tritt nur auf, wenn eine Zeitüberschreitung auftritt. – VishnuSP

+0

Sobald die Peripherieseitentrennung auftritt - sollte das 'Observable' von' .establishConnection() 'eine' BleDisconnectedException' ausgeben - ist das der Fall? –

+0

Nein, ich bin nicht BleDisconnectedException bekommen, aber BleGattException 'W/System.err: BleGattException {status = 19, bleGattOperation = BleGattOperation {description =' Verbindungs-'}} W/System.err: bei com.polidea. rxandroidble.internal.connection.RxBleGattCallback.propagateStatusErrorIfGattErrorOccurred (RxBleGattCallback.java:248) ' – VishnuSP

Verwandte Themen