在 establishConnection 的 onNext 中故意关闭连接不是一个好方法,如果连接丢失,只会发生错误

Not a good way to knowingly close a connection within the `onNext` of `establishConnection` and if connection is lost, only errors occur

如果我正在编写将重启设备的功能,我 运行 会陷入麻烦的世界。例如。

scanResult.bleDevice.establishConnection(false).flatMapCompletable { connection ->
        connection.writeCharacteristic(UUID, "reboot".toByteArray(Charset.defaultCharset())).ignoreElement()
}

最初的建立连接从未正确完成,只有 returns 设备已断开连接的错误,加上所有其他类型的代码来处理不正确的断开连接,这个变成了 difficult.If我尝试在 writeCharacteristiconComplete 期间处理连接 我似乎从未得到适当的回调。我不确定这是否有任何特定的 bug,而是我正在寻找如何正确

这个问题更多地与 RxJava 2 的使用有关,而不是与图书馆有关。要解决您的问题,您需要首先保持对 .establishConnection() 的订阅,直到它发出并发生后续写入。代码可能如下所示:

scanResult.bleDevice.establishConnection(false) // establish the connection
    .publish { connectionObs ->
        // it will be needed to be subscribed until something will happen on it so a need to publish
        connectionObs.takeUntil( // keep the connection subscribed until...
            connectionObs.flatMapSingle {
                // ...the first write will complete
                it.writeCharacteristic(
                    uuid,
                    "reboot".toByteArray(Charset.defaultCharset())
                )
            }
        )
    }
    .ignoreElements()