我正在使用Polidea's RxAndroidBle library与Android应用程序中的设备进行通信。
我对响应式编程非常陌生,因此我无法确切地知道如何执行以下操作:
我见过this related answer,但是它是使用库的第一个版本完成的,我无法弄清楚如何使用新版本。
谢谢。
答案 0 :(得分:0)
我结束了自己的思考。这是一种在特征中设置指示或通知,然后将一些字节写入另一个特征,然后返回Observable<String>
的方法,该byte[]
发出解析为十六进制String
且已读取的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);
}
通知/指示。
希望它可以帮助其他人在RxJava2中寻找该解决方案。
{{1}}