如何使用rxandroidble

时间:2018-03-11 17:50:52

标签: android rxandroidble

我目前的代码如下所示。我想知道如何在writeCharacteristic之后取消订阅(断开连接)?另外,有没有办法重新连接writeCharacteristic失败?

  Subscription subscription = device.establishConnection(false)
                    .timeout(5000, TimeUnit.MILLISECONDS)
                    .flatMap(rxBleConnection ->
                            rxBleConnection.writeCharacteristic(fromString("00005551-0000-1000-8000-008055555fb"), hexToBytes(mData)))
                   .take(1).retry(2)
                    .subscribe(

                            characteristicValue -> {
                                Log.e(TAG, "write success " + characteristicValue + " " + device.getMacAddress());
                               // subscribeList.remove(key).unsubscribe();
                            },
                            throwable -> {
                                Log.e(TAG, "write error " + throwable);
                              //  subscribeList.remove(key).unsubscribe();
                            }
                    );

2 个答案:

答案 0 :(得分:1)

  

我想知道如何在连接后取消订阅(断开连接)?

我假设after connectionafter the write因为如果连接因外部因素而结束(如外围设备被关闭)那么整个流程将以错误结束。

如果您只想写一个值然后断开连接,那么您需要的一切就是在writeCharacteristic()之后使用.take(1)之前的.subscribe()从流中获取单个值。< / p>

  

另外,有没有办法在writeCharacteristic上重新连接失败?

首先,如果错误与写入本身有关,则rxBleConnection.writeCharacteristic()的失败不会自动关闭自{1.3}版本的RxAndroidBle以来的连接。

您可能遇到的连接只是因为您没有处理写入操作的错误而被关闭。您可以使用.retry(2)运算符使写入重试两次。

请注意Observable尝试.retry() .retry()。如果您有兴趣仅在失败时重试写入但连接仍然有效,那么您应该在RxBleConnection.writeCharacteristic()上应用.retry()。另一方面 - 如果您想要在发生任何错误时重试整个流程,那么您应该将Observable放在整个流Subscription subscription = device.establishConnection(false) .flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic( fromString("00005551-0000-1000-8000-008055555fb"), hexToBytes(mData) ) .retry(2) // retry here will only retry the write if a write characteristic will fail but the connection will still be intact ) .take(1) // this will unsubscribe the above part of the Observable on the first valid emission from it—so after the write will complete // .retry(2) if you will put retry here then for whatever reason the above flow [connecting + writing] will fail then a new connection will be established and write performed .subscribe( characteristicValue -> { Log.e(TAG, "write success " + characteristicValue + " " + device.getMacAddress()); }, throwable -> { Log.e(TAG, "write error " + throwable); } ); 上。

site_url("/Admin/addPerson/username/password/accesslevel")

答案 1 :(得分:0)

只需: subscription.unsubscribe();

如果我正确理解了这个过程,那么取消订阅将会“冒泡”#34;通过操作员堆栈到顶部,从而断开连接。