我在用Polidea 的 RxAndroidBle 库 https://github.com/Polidea/RxAndroidBle与我的 Android 应用程序中的设备进行通信。
我对反应式编程非常陌生,所以我无法弄清楚如何执行以下操作:
- 在一项特征(特征 A)中设置通知。
- 通知设置完成后,写入另一个特征(特征 B)。这将触发来自特征 A 的通知。
- 当写操作完成后,等待特性A中的Notification的到来。
- 在应用程序的不同部分多次重复相同的步骤(1 到 3)。
我见过这个相关答案 https://stackoverflow.com/a/38919653/10648865,但它是使用库的第一个版本完成的,我不知道如何使用新版本来完成它。
Thanks.
我最终自己弄清楚了。这是一种在特征中设置指示或通知的方法,然后将一些字节写入另一个特征并返回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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)