RxAndroidBle:JustWorks绑定和操作超时问题

时间:2018-11-20 17:38:33

标签: android bluetooth-lowenergy rx-android rxandroidble

我正在处理需要加密的特征,因此Android将自动创建绑定以执行写/读操作。

  

债券可能会由   操作系统。通常,将读/写请求发送到   需要加密的特征。 (reference here)

但是,第一个读/写操作将失败并带有超时(库中的默认值为30秒),但是如果我在创建绑定后立即尝试该操作,则会立即重试。

我知道第一次绑定操作总是会失败,所以我想尽快执行,而不要等30秒才能失败。为此,我要做的是为整个连接建立一个10秒的超时,如下所示:

scaleDevice.establishConnection(false, new Timeout(10, TimeUnit.SECONDS))

但是,我希望能够在建立连接后更改操作超时,因此我可以执行以下操作:

  1. 以默认的30秒操作超时建立连接。
  2. 在我第一次需要对加密特征进行读/写之前,我想将超时设置为较小的值(可能是5秒)。
  3. 对加密特征的第一次读/写操作将在5秒后失败。
  4. 我将重试该操作,现在它将成功。
  5. 我想将操作超时设置回30s。

在当前版本的RxAndroidBle library中可以吗?

1 个答案:

答案 0 :(得分:0)

我检查了库的源代码,并且意识到在当前版本的库中,建立连接后无法更改超时。

我打开了一个issue suggesting to add this functionality in the future.

关于绑定和加密特征问题,我想出了一个更好的解决方法。我确保在建立连接之前先进行绑定,而不是在第一次失败的操作之后等待自动绑定。 I achieved that by calling the bondWithDevice method available in this helper class像这样:

BondingHelper.bondWithDevice(this, scaleDevice, 30, TimeUnit.SECONDS)
                    .andThen(scaleDevice.establishConnection(false))
                    .observeOn(AndroidSchedulers.mainThread())
                    .doFinally(this::disposeConnection)
                    .subscribe(this::connectionEstablished, this::throwException);