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

时间:2018-09-11 07:44:55

标签: rx-java rx-android 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设备需要保证手机的同步请求,因此必须在请求执行完成后才能完成请求。我对RX不熟悉。我该如何以FIFO的方式执行上述代码?

1 个答案:

答案 0 :(得分:2)

如前所述,您的代码可以执行一次,但是当有多个并行请求时,它们将不会序列化。您需要添加的是requestCharacteristic()函数的外部同步。

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