android - RxAndroidBle:设置通知,写入特性并等待通知继续

标签 android bluetooth-lowenergy rx-java2 rx-android rxandroidble

我正在使用 Polidea's RxAndroidBle library与我的 Android 应用程序中的设备通信。

我是响应式编程的新手,所以我无法弄清楚如何执行以下操作:

  1. 在一个特征(特征 A)中设置通知。
  2. 完成通知设置后,写入另一个特征(特征 B)。这将触发来自特性 A 的通知。
  3. 写操作完成后,等待特征A中的Notification到来。
  4. 在应用程序的不同部分多次重复相同的步骤(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/

相关文章:

java - 使用另一个 Observable<List<AnotherObject>> 过滤 Observable<List<Object>>

java - 将 Observable<Single<Object>> 转换为 Single<List<Object>>

android - 从 AndroidKeystore 加载私钥时出现问题

iphone - 如何将纹理映射到曲面上?

android - 为什么即使被要求不绑定(bind),Android 也会绑定(bind)?

android - 如何在不扫描的情况下连接ble设备?安卓4.3

uwp - UWP BLE 代码中的隐秘 System.ArgumentException

java - 主数字键盘 Android

android - 如何使用适用于 Android 的照片浏览器创建网格缩略图画廊

android - 如何使用 rxjava 为列表中的每个项目发出改造 api 请求?