我正在使用 RxAndroidBLE 库来发现我的 GATT 服务器中的服务。它大部分时间都可以正常工作,但我经常收到 GATT 错误 133 (0x85) 并且它失败了。我想在一段时间内重试几次发现服务,比如 5 秒。这是我正在尝试的代码
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 问题,但我将非常感谢您对此的任何帮助。