我在项目中使用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的方式执行上述代码?
答案 0 :(得分:2)
如前所述,您的代码可以执行一次,但是当有多个并行请求时,它们将不会序列化。您需要添加的是requestCharacteristic()
函数的外部同步。
已经回答了question for keeping a persistant connection with serialised write/notification handling,这可能正是您要寻找的。答案是针对基于RxJava1
的库版本创建的,但将其调整为RxJava2
并不难。