我正在使用 Polidea's RxAndroidBle library与我的 Android 应用程序中的设备通信。
我是响应式编程的新手,所以我无法弄清楚如何执行以下操作:
- 在一个特征(特征 A)中设置通知。
- 完成通知设置后,写入另一个特征(特征 B)。这将触发来自特性 A 的通知。
- 写操作完成后,等待特征A中的Notification到来。
- 在应用程序的不同部分多次重复相同的步骤(1 到 3)。
我看过this related answer ,但它是使用第一个版本的库完成的,我不知道如何使用新版本来完成。
谢谢。
最佳答案
最后我自己弄明白了。这是一个在特性中设置指示或通知的方法,然后将一些字节写入另一个特性并返回 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);
}
关于android - RxAndroidBle:设置通知,写入特性并等待通知继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395079/