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

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

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

    我正在处理需要加密的特性,因此Android将自动创建一个绑定来执行写入/读取操作。

    有一种可能性,债券将自动创建 操作系统。当读/写请求发送到 需要加密的特性。( reference here)

    但是,第一次读/写操作将失败并超时(库中的默认值为30秒),但是如果我在操作生效后立即重试该操作,因为已创建绑定。

    我知道第一次读/写操作总是因为绑定而失败,所以我希望尽快执行,而不是等待30秒失败。为了做到这一点,我所做的就是为整个连接建立一个10秒的超时,如下所示:

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

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

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

    在当前版本的 RxAndroidBle library 是吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   dglozano    7 年前

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

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