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

RxAndroidBle: JustWorks bonding and operation timeout issue

我正在处理需要加密的特征,因此 Android 将自动创建一个键来执行 write/read 操作。

There is a possibility that a bond will be automatically created by the OS. This usually happens when a read/write request is sent to a characteristic that needs encryption. (reference here)

但是,第一个 read/write 操作会因超时而失败(库中的默认值为 30 秒),但是如果我在它起作用后立即重试该操作,因为绑定已创建。

我知道第一个 read/write 操作总是会因为绑定的事情而失败,所以我想尽快执行,而不是等待 30 秒才失败。为此,我所做的是像这样为整个连接建立 10 秒超时:

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

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

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

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

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

我开了一个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);