如何使用 RxBleAndroid 从多个服务获取特征通知

时间:2021-03-26 17:54:47

标签: android rxandroidble

正如标题所说,我正在尝试从不同服务中获取有关特征的通知。

但是,似乎只有来自被发现的第一个服务的特征的通知有效。

我是 BLE 和这个库的新手,所以也许我在这里做错了什么,但基本上这就是我正在做的:

  1. 发现所有服务
  2. 对于每项服务,发现所有特征
  3. 对于每个特征,读取描述符和值

阅读该值后,我设置了我感兴趣的特征 UUID 的通知,如此处 https://github.com/Polidea/RxAndroidBle#change-notifications

图书馆自述文件中所述

我创建了一个方法来设置如下所示的通知:

public void setUpNotification(@NonNull String descriptorString, @NonNull UUID characteristicUUID) {
    Disposable notificationDisposable = rxBleConnection.setupNotification(characteristicUUID)
            .doOnNext(notificationObservable -> {
                    Log.v(TAG, "setUpNotification # " + descriptorString + ", " + characteristicUUID);
            })
            .flatMap(notificationObservable -> notificationObservable)
            .subscribe(
                    bytes -> {
                        Log.v(TAG, "setUpNotification # " + descriptorString + "=" + Arrays.toString(bytes));
                        handleNotification(descriptorString, bytes);
                    },
                    throwable -> {
                        Log.e(TAG, "setUpNotification # " + descriptorString + ", Error: " + Exceptions.toString(throwable));
                    }
            );
    disposables.add(notificationDisposable);
}

我可以在日志中看到为所有需要的特性设置了通知,但我只收到来自循环的第一个服务的特性通知。如果我跳过为第一个服务设置的通知,我只会收到来自第二个服务的通知,而不会收到第三个服务的通知。我必须从所有 3 个服务中获取有关特征的通知,但到目前为止我无法使其正常工作。

我做了一些研究,但找不到任何示例说明如何订阅来自不同服务的特征的通知,因此我们将不胜感激!

0 个答案:

没有答案