如何为RxAndroidBle实现同步任务队列

How to implement synchronous task queue for RxAndroidBle

总结

我在项目中使用RxAndroidBle作为BLE通信框架。我通过以下方式写入后从通知中收到数据:

public Observable<byte[]> requestCharacteristic(UUID notificationUuid, UUID writeUuid, byte[] writeData) {
    return Observable.zip(
             connectionObservable.concatMap(rxConnection -> rxConnection.setupNotification(notificationUuid))
                 .concatMap(rxConnection -> rxConnection).first(),
             connectionObservable.concatMap(rxConnection -> rxConnection.writeCharacteristic(writeUuid, writeData)),
             (responseBytes, writeBytes) -> { return responseBytes; }
    );
}

问题

由于BLE设备需要保证手机phone的同步请求,所以必须在请求执行完成后才能完成请求。我对 RX 不熟悉。我怎样才能以先进先出的方式执行上面的代码?

正如您所说,您的代码将适用于单次执行,但是当有多个并行请求时,它们将不会被序列化。您需要添加的是 requestCharacteristic() 函数的外部同步。

已经回答了 question for keeping a persistant connection with serialised write/notification handling,这可能正是您要查找的内容。答案是为基于 RxJava1 的库版本创建的,但将其调整为 RxJava2.

应该不会太难