RxAndroidBle: Failed to reconnect device after bluetooth disable
Summary
Failed to reconnect to a device after switch on the bluetooth. And on every device when bluetooth enable weird exception.
Library version
1.4.3
Preconditions
- Honor 8 or Gretel gt6000
Steps to reproduce actual result
1. Establish connection
2. Kill bluetooth
3. try to establish again connection
Minimum code snippet reproducing the issue
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rxBleClient = RxBleClient.create(this)
val device = rxBleClient.getBleDevice("XX:XX:XX:XX:XX:XX")
button.setOnClickListener {
subscriptor = RxJavaInterop.toV2Observable(device?.establishConnection(false)?.doOnNext {
Log.i(TAG, "connected RX")
})?.subscribe({
Log.w(TAG, "connected")
}, {
Log.e(TAG, "error",it)
})
}
}
Logs from the application running with setting RxBleLog.setLogLevel(RxBleLog.VERBOSE)
First click :
02-20 18:22:08.471 8236-8236/com.example.testble D/MAIN: click
02-20 18:22:08.518 8236-8287/com.example.testble D/BluetoothGatt: connect() - device: XXXXXXXXXXXXXXXXXX, auto: false
registerApp()
02-20 18:22:08.519 8236-8287/com.example.testble D/BluetoothGatt: registerApp() - UUID=b46d98a3-c929-47b1-9737-c94b117d7f53
02-20 18:22:08.536 8236-8248/com.example.testble D/BluetoothGatt: onClientRegistered() - status=0 clientIf=5
02-20 18:22:08.760 8236-8248/com.example.testble D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=5 device=XXXXXXXXXXXXXXXXXX
02-20 18:22:08.766 8236-8286/com.example.testble I/MAIN: connected RX
02-20 18:22:08.766 8236-8286/com.example.testble W/MAIN: connected
Disable bluetooth
When trying to connect after Bluetooth disable :
02-20 18:18:07.981 21761-21761/com.example.testble D/MAIN: click
02-20 18:18:08.026 21761-21915/com.example.testble D/BluetoothGatt: connect() - device: XXXXXXXXXXXXXXXXXX, auto: false
02-20 18:18:08.027 21761-21915/com.example.testble D/BluetoothGatt: registerApp()
registerApp() - UUID=63905fac-2e0b-4cbd-ad6e-87c11750d6b3
02-20 18:18:08.050 21761-21774/com.example.testble D/BluetoothGatt: onClientRegistered() - status=0 clientIf=7
02-20 18:18:38.068 21761-21774/com.example.testble D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=7 device=XXXXXXXXXXXXXXXXXX
02-20 18:18:38.095 21761-21774/com.example.testble E/MAIN: error
com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from XXXXXXXXXXXXXXXXXX
at com.polidea.rxandroidble.internal.connection.RxBleGattCallback$2.onConnectionStateChange(RxBleGattCallback.java:76)
at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:191)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:70)
at android.os.Binder.execTransact(Binder.java:565)
02-20 18:18:38.291 21761-21766/com.example.testble I/art: Do partial code cache collection, code=29KB, data=26KB
After code cache collection, code=29KB, data=26KB
Increasing code cache capacity to 128KB
02-20 18:18:50.343 21761-21761/com.example.testble V/AudioManager: playSoundEffect effectType: 0
querySoundEffectsEnabled...
02-20 18:18:50.343 21761-21761/com.example.testble D/MAIN: click
02-20 18:18:50.344 21761-21761/com.example.testble E/MAIN: error
com.polidea.rxandroidble.exceptions.BleAlreadyConnectedException: Already connected to device with MAC address XXXXXXXXXXXXXXXXXX
at com.polidea.rxandroidble.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:80)
at com.polidea.rxandroidble.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:67)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at hu.akarnokd.rxjava.interop.ObservableV1ToObservableV2.subscribeActual(ObservableV1ToObservableV2.java:37)
at io.reactivex.Observable.subscribe(Observable.java:10903)
at io.reactivex.Observable.subscribe(Observable.java:10889)
at io.reactivex.Observable.subscribe(Observable.java:10818)
at com.example.testble.MainActivity$onCreate$1.onClick(MainActivity.kt:54)
at android.view.View.performClick(View.java:5646)
at android.view.View$PerformClick.run(View.java:22473)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Actual result
Impossible to reconnect to the device even when we close the application.
The weird things is when I try to click (first time) why the Bluetooth disable I get :
02-20 18:29:50.594 10302-10302/com.example.testble D/MAIN: click
02-20 18:29:50.611 10302-10343/com.example.testble E/MAIN: error
com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from XXXXXXXXXXXXXXXXXX
at com.polidea.rxandroidble.internal.connection.DisconnectionRouter$1.call(DisconnectionRouter.java:48)
at com.polidea.rxandroidble.internal.connection.DisconnectionRouter$1.call(DisconnectionRouter.java:45)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:69)
at rx.internal.operators.OnSubscribeFilter$FilterSubscriber.onNext(OnSubscribeFilter.java:76)
at rx.observers.SerializedObserver.onNext(SerializedObserver.java:91)
at rx.observers.SerializedSubscriber.onNext(SerializedSubscriber.java:94)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.innerNext(OnSubscribeConcatMap.java:182)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapInnerScalarProducer.request(OnSubscribeConcatMap.java:366)
at rx.internal.producers.ProducerArbiter.setProducer(ProducerArbiter.java:126)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:278)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.slowPath(OnSubscribeFromArray.java:100)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.request(OnSubscribeFromArray.java:63)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:32)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:24)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)
at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeFilter.call(OnSubscribeFilter.java:45)
at rx.internal.operators.OnSubscribeFilter.call(OnSubscribeFilter.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.fastPath(OnSubscribeFromArray.java:76)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.request(OnSubscribeFromArray.java:58)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:32)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:24)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorReplay.connect(OperatorReplay.java:310)
at rx.observables.ConnectableObservable.autoConnect(ConnectableObservable.java:125)
at rx.observables.ConnectableObservable.autoConnect(ConnectableObservable.java:105)
at com.polidea.rxandroidble.internal.connection.DisconnectionRouter.<init>(DisconnectionRouter.java:57)
at com.polidea.rxandroidble.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:36)
at com.polidea.rxandroidble.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:10)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.polidea.rxandroidble.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:37)
at com.polidea.rxandroidble.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:8)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.polidea.rxandroidble.internal.operations.ConnectOperation_Factory.get(ConnectOperation_Factory.java:65)
at com.polidea.rxandroidble.internal.operations.ConnectOperation_Factory.get(ConnectOperation_Factory.java:14)
at com.polidea.rxandroidble.DaggerClientComponent$DeviceComponentImpl$ConnectionComponentImpl.connectOperation(DaggerClientComponent.java:861)
at com.polidea.rxandroidble.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:54)
at com.polidea.rxandroidble.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:38)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at hu.akarnokd.rxjava.interop.ObservableV1ToObservableV2.subscribeActual(ObservableV1ToObservableV2.java:37)
at io.reactivex.Observable.subscribe(Observable.java:10903)
at io.reactivex.Observable.subscribe(Observable.java:10889)
at io.reactivex.Observable.subscribe(Observable.java:10818)
at com.example.testble.MainActivity$onCreate$1.onClick(MainActivity.kt:54)
at android.view.View.performClick(View.java:5646)
at android.view.View$PerformClick.run(View.java:22473)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
second time I get : (still Bluetooth off)
02-20 18:31:14.011 10302-10302/com.example.testble D/MAIN: click
02-20 18:31:14.012 10302-10302/com.example.testble E/MAIN: error
com.polidea.rxandroidble.exceptions.BleAlreadyConnectedException: Already connected to device with MAC address XXXXXXXXXXXXXXXXXX
at com.polidea.rxandroidble.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:80)
at com.polidea.rxandroidble.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:67)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at hu.akarnokd.rxjava.interop.ObservableV1ToObservableV2.subscribeActual(ObservableV1ToObservableV2.java:37)
at io.reactivex.Observable.subscribe(Observable.java:10903)
at io.reactivex.Observable.subscribe(Observable.java:10889)
at io.reactivex.Observable.subscribe(Observable.java:10818)
at com.example.testble.MainActivity$onCreate$1.onClick(MainActivity.kt:54)
at android.view.View.performClick(View.java:5646)
at android.view.View$PerformClick.run(View.java:22473)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Not only on the Honor is that normal ?
Expected result
To be able to turn on bluetooth and connect to the device again. And an other exception like Bluetooth Adapter not available
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 21 (9 by maintainers)
Hello @TimoPtr You can read more on the topic here: #318 Currently we have no solution that is bulletproof…