我在设置多个特征的通知时遇到问题。我已经查看了文档,并且许多示例仅涵盖了非常精细的情况。
我的用例如下: 1. 扫描设备 2. 用户选择要连接的设备(连接一直持续到应用程序关闭) 3. 订阅许多特征的通知 4. 读取/写入任一单个特征时间,在某些情况下,一次读取/写入许多特征
我在设置多个特征的通知时遇到问题。我已经查看了文档,并且许多示例仅涵盖了非常精细的情况。
我的用例如下: 1. 扫描设备 2. 用户选择要连接的设备(连接一直持续到应用程序关闭) 3. 订阅许多特征的通知 4. 读取/写入任一单个特征时间,在某些情况下,一次读取/写入许多特征
这是我的多次写入解决方案
mConnObservable.flatMapSingle(rxBleConnection -> {
return rxBleConnection.writeCharacteristic(SSID, mSsidView.getText().toString().getBytes())
.flatMap(ssidBytes -> rxBleConnection.writeCharacteristic(SSID2, mPassPhrase.getText().toString().getBytes())
.flatMap(ssid2Bytes -> rxBleConnection.writeCharacteristic(SSID3, mSecurityModeSpinner.getSelectedItem().toString().getBytes())));
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ssid3Bytes -> {
//do something
}, this::onError, this::onComplete);
您应该将其他 flatMap 操作放在第一个 flatMap 中,因为您只能在第一个 flatMap 中获取 rxBleConnection
RxAndroidBle RxJava 1 版本的原始解决方案:
mConnObservable.flatMap(rxBleConnection -> {
return rxBleConnection.writeCharacteristic(SSID, mSsidView.getText().toString().getBytes())
.flatMap(ssidBytes -> rxBleConnection.writeCharacteristic(SSID2, mPassPhrase.getText().toString().getBytes())
.flatMap(ssid2Bytes -> rxBleConnection.writeCharacteristic(SSID3, mSecurityModeSpinner.getSelectedItem().toString().getBytes())));
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ssid3Bytes -> {
//do something
}, this::onError, this::onComplete);
我现在开始工作了。问题是我需要使用一个实例RxBleConnection
以便以后连接