我试图读和写的特点,特殊的服务,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的任何特征,它将给你的结果。

发布于 2019-09-18 11:26:58
我有工作要做。
用于连接
Disposable disposable = connectionObservable
.flatMap(connection -> connection.discoverServices()
.map(RxBleDeviceServices::getBluetoothGattServices)
.flatMapObservable(Observable::fromIterable) // map to individual services
.map(BluetoothGattService::getCharacteristics) // for each service take all characteristics)
.flatMap(Observable::fromIterable) // map to individual characteristic)
//.filter(characteristic -> (BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) != 0) // consider only characteristics that have indicate or notify property
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
characteristic -> {
onConnectionReceived();
},
this::onConnectionFailure,
this::onConnectionReceived
);
compositeDisposable.add(disposable);如果连接成功,则可以读取、写入和通知此单个连接中的任何特征。
有关读、写和通知,可以检查RxAndroidBle。
发布于 2019-09-16 16:06:29
如果我理解你的问题,你可能会考虑使用杰克沃顿的ReplayingShare共享BLE连接。
下面是一些可能有用的讨论:https://github.com/Polidea/RxAndroidBle/issues/406
反应性纯粹主义者似乎认为,您应该能够用一条subscribe()语句来做任何您想做的事情,但我还不够聪明,无法弄清楚这一点。
https://stackoverflow.com/questions/57945944
复制相似问题