我正在使用RxAndroidBLE庫來發現我的GATT服務器中的服務。 它大部分時間都能正常工作,但通常我得到GATT錯誤133(0x85),並且失敗。我想重試發現一段時間的服務時間,比如說5秒。 這裏是我想如何在GATT錯誤的情況下重試RxAndroidBLE發現服務。
bleDevice = mBleClient.getBleDevice(macAddress);
subscription = bleDevice.establishConnection(false)
.flatMap(RxBleConnection::discoverServices)
.first() // Disconnect automatically after discovery
.observeOn(AndroidSchedulers.mainThread())
.doOnUnsubscribe(this::onUnsubscribe)
.compose(this.bindToLifecycle())
.retryWhen(errors -> errors.flatMap(error -> {
if (isGattError(error) {
return Observable.just(new Object());
} else {
return Observable.error(error);
}
}
))
.timeout(5, TimeUnit.SECONDS)
.subscribe(this::getScanResult, this::onConnectionFailure);
它不工作,看起來像retryWhen是沒有得到所謂的代碼。這可能是更多的rxJava問題,但我真的很感激任何幫助。
你好@Avijeet - 你確定連接和服務發現將在5秒內成功完成嗎? –
我觀察到的是,當它工作時,服務發現只需要一兩秒鐘。 5秒的時間間隔可以更改,主要問題是如何重試。 – Avijeet
你在'.onUnsubscribe()'中做了什麼? –