如何同时连接多个特征?

时间:2019-09-15 16:15:21

标签: android rx-java rxandroidble

我正在尝试读写BLE设备特定服务的特性。

我在这里引用RxAndroidBle中的演示代码。

在此演示中,当您按特定功能时发现服务后,它将进入下一个屏幕并建立连接,然后执行读/写操作。

我的问题:发现服务后,有什么方法可以读取/写入任何特征?为什么在读/写操作之前需要进行任何特性的连接?

下面的代码用于连接单个特征,但我想同时连接3-4个特征。我尝试了 .flatmap(),但给了我错误。

  final Disposable connectionDisposable = connectionObservable
                            .flatMapSingle(RxBleConnection::discoverServices)
                            .flatMapSingle(rxBleDeviceServices -> rxBleDeviceServices.getCharacteristic(Consts.ALERT_LEVEL_UUID))
                            .observeOn(AndroidSchedulers.mainThread())
                            .doOnSubscribe(disposable -> text_connection.setText("Status: Connecting"))
                            .subscribe(
                                    characteristic -> {
                                        updateUI(characteristic);
                                        Log.i(getClass().getSimpleName(), "Hey, connection has been established!");
                                    },
                                    this::onConnectionFailure,
                                    this::onConnectionReceived
                            );

只要按R或W获得任何特征,就可以像下面的图片一样获得效果。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果我理解您的问题,那么您可能希望使用Jake Wharton的ReplayingShare分享BLE连接。

这里有一些讨论可能会有所帮助:https://github.com/Polidea/RxAndroidBle/issues/406

反应性的纯粹主义者似乎相信您只要使用一个subscribe()语句就可以做任何您想做的事,但是我不够聪明,无法弄清楚这一点。

答案 1 :(得分:0)

我得到了解决。

用于连接

{{1}}

如果连接成功,则可以读取,写入并通知此单个连接中的任何特征

对于读取,写入和通知,您可以检查RxAndroidBle