2

我在设置多个特征的通知时遇到问题。我已经查看了文档,并且许多示例仅涵盖了非常精细的情况。

我的用例如下: 1. 扫描设备 2. 用户选择要连接的设备(连接一直持续到应用程序关闭) 3. 订阅许多特征的通知 4. 读取/写入任一单个特征时间,在某些情况下,一次读取/写入许多特征

4

2 回答 2

1

这是我的多次写入解决方案

 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);
于 2017-06-22T06:22:55.000 回答
1

我现在开始工作了。问题是我需要使用一个实例RxBleConnection以便以后连接

于 2017-06-12T20:47:03.357 回答