代码之家  ›  专栏  ›  技术社区  ›  dglozano

rxandroidble:设置通知、写入特征并等待通知继续

  •  0
  • dglozano  · 技术社区  · 7 年前

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

    我对反应式编程非常陌生,因此我无法确切地了解如何执行以下操作:

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

    我见过 this related answer 但是,它是使用库的第一个版本完成的,我不知道如何使用新版本完成它。

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   dglozano    7 年前

    我自己弄清楚了。这里有一个方法,它在一个特征中设置指示或通知,然后将一些字节写入另一个特征,并返回 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);
    }