RxAndroidBle:设置通知,写入特性并等待通知继续
RxAndroidBle: Setup notification, write on characteristic and wait for notification to proceed
我正在使用 Polidea's RxAndroidBle library 与我的 Android 应用程序中的设备通信。
我是响应式编程的新手,所以我不知道如何执行以下操作:
- 在一项特性(特性 A)中设置通知。
- 完成通知设置后,写入另一个特征(特征 B)。这将触发来自特性 A 的通知。
- 写操作完成后,等待特性A中Notification的到来
- 在应用程序的不同部分多次重复相同的步骤(1 到 3)。
我看过this related answer,但它是使用第一个版本的库完成的,我不知道如何使用新版本。
谢谢。
我自己搞定了。这是一种在特性中设置指示或通知的方法,然后将一些字节写入另一个特性和 returns 一个 Observable<String>
发出 byte[]
解析为十六进制 String
在 notification/indication.
上阅读
希望它能帮助其他人在 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);
}
我正在使用 Polidea's RxAndroidBle library 与我的 Android 应用程序中的设备通信。
我是响应式编程的新手,所以我不知道如何执行以下操作:
- 在一项特性(特性 A)中设置通知。
- 完成通知设置后,写入另一个特征(特征 B)。这将触发来自特性 A 的通知。
- 写操作完成后,等待特性A中Notification的到来
- 在应用程序的不同部分多次重复相同的步骤(1 到 3)。
我看过this related answer,但它是使用第一个版本的库完成的,我不知道如何使用新版本。
谢谢。
我自己搞定了。这是一种在特性中设置指示或通知的方法,然后将一些字节写入另一个特性和 returns 一个 Observable<String>
发出 byte[]
解析为十六进制 String
在 notification/indication.
希望它能帮助其他人在 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);
}