J'utilise la bibliothèque RxAndroidBLE pour découvrir des services dans mon serveur du GATT. cela fonctionne très bien la plupart du temps, mais souvent je reçois l'erreur GATT 133 (0x85) et il échoue. Je voudrais réessayer pour la découverte du service quelques temps pour une période de temps, disons pendant 5 secondes. ici est le code que je suis en trainComment réessayer RxAndroidBLE Discover Services en cas d'erreur du GATT.
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);
Son ne fonctionne pas et ressemble à la retryWhen n'est pas appelé. C'est peut-être plus de problème de rxJava mais j'apprécierai vraiment n'importe quelle aide sur ceci.
Bonjour @Avijeet - êtes-vous sûr que la connexion et la découverte de service se termineront bien dans ces 5 secondes? –
ce que j'ai observé est que quand cela fonctionne, il faut seulement une seconde ou deux pour la découverte de service. Intervalle de temps de 5 secondes peut être modifié, le principal problème est de savoir comment réessayer. – Avijeet
Que faites-vous dans '.onUnsubscribe()'? –