我正在使用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()'中做了什么? –