GATTサーバでサービスを検出するためにRxAndroidBLEライブラリを使用しています。 ほとんどの場合は大丈夫ですが、GATTエラー133(0x85)が出て失敗することがよくあります。私は時間のサービスカップルの発見のためにある期間、例えば5秒の間、再試行したいと思う。 は、ここで私は働いていないGATTエラーの場合にRxAndroidBLE Discoverサービスを再試行する方法。
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秒間に接続とサービスの検出が正常に終了することは確実ですか? –
私が観察したことは、動作するときにサービス発見のためにわずか2〜2時間かかります。 5秒の時間間隔を変更することができます、主な問題は再試行する方法です。 – Avijeet
'.onUnsubscribe()'では何をしていますか? –