我正在尝试读写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获得任何特征,就可以像下面的图片一样获得效果。
答案 0 :(得分:1)
如果我理解您的问题,那么您可能希望使用Jake Wharton的ReplayingShare分享BLE连接。
这里有一些讨论可能会有所帮助:https://github.com/Polidea/RxAndroidBle/issues/406
反应性的纯粹主义者似乎相信您只要使用一个subscribe()
语句就可以做任何您想做的事,但是我不够聪明,无法弄清楚这一点。
答案 1 :(得分:0)