代码之家  ›  专栏  ›  技术社区  ›  Avijeet

如何在GATT错误的情况下重试RxAndroidBLE发现服务。

  •  0
  • Avijeet  · 技术社区  · 7 年前

    我正在使用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的问题,但我真的非常感谢在这方面的任何帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dariusz Seweryn    7 年前

    正如你在评论中所写 this::onUnsubscribe subscription.unsubscribe() 所以 .retryWhen()

    你可以移动 .doOnUnsubscribe() 低于