我使用Polidea的RxAndroidBle库在我的Android应用程序中的设备进行通信。
我是很新的反应式编程,所以我无法弄清楚究竟是如何做到以下几点:
- 在一个特征(特征A)设置的通知。
- 当通知设置后,写入另一个特征(特征B)。 这将触发特性A.未来一个通知
- 当进行写操作,等待通知的特点A.到来
- 重复在应用程序的不同部分中的相同的步骤(1至3)许多次。
我已经看到了这个相关的答案 ,但它使用的库的第一个版本做,我无法弄清楚如何使用新的版本来做到这一点。
谢谢。
我使用Polidea的RxAndroidBle库在我的Android应用程序中的设备进行通信。
我是很新的反应式编程,所以我无法弄清楚究竟是如何做到以下几点:
我已经看到了这个相关的答案 ,但它使用的库的第一个版本做,我无法弄清楚如何使用新的版本来做到这一点。
谢谢。
我结束了我自己想出来的。 下面是一个方法,其设置在一个特性的指示或通知,然后写入一些字节另一特征,并返回一个Observable<String>
发出的byte[]
解析,以十六进制String
中读取的通知/指示。
希望它可以帮助别人寻找RxJava2此解决方案。
private Observable<String> writeAndReadOnNotification(UUID writeTo, UUID readOn,
String hexString,
boolean isIndication,
RxBleConnection rxBleConnection) {
Observable<Observable<byte[]>> notifObservable =
isIndication ?
rxBleConnection.setupIndication(readOn) :
rxBleConnection.setupNotification(readOn);
return notifObservable.flatMap(
(notificationObservable) -> Observable.combineLatest(
rxBleConnection.writeCharacteristic(writeTo, hexToBytes(hexString)).toObservable(),
notificationObservable.take(1),
(writtenBytes, responseBytes) -> bytesToHex(responseBytes)
)
).take(1)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(this::throwException);
}