RxAndroidBle如何正确写入ble设备?

时间:2016-08-25 14:16:13

标签: rxandroidble

您好我正在尝试用RxJava和BLE构建我的第一个应用程序,我有一个问题:我在单一类(我用于连接,通知等等)中制作了一个wite(字节b)方法。所以现在,如果我想将数据写入BLE设备,我会调用此方法。我需要从代码的不同部分做很多事情。我对RxJava概念很新,我觉得我做错了。 目前的解决方案:

public void write(byte[] b) {

        if (isConnected()) {
            connectionObservable
                    .flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(characteristicUuid, b))
                    .subscribe(bytes -> {
                        onWriteSuccess(bytes);
                    }, this::onWriteFailure);
        }

    }

我觉得我需要做那样的事情,但我不知道如何:

 protected static final BlockingQueue<byte[]> TxQueue = new ArrayBlockingQueue<>(32);

 public void write(byte[] b) {

       TxQueue.add(bytes);

    }

在连接设备期间只调用一次:

connectionObservable
                    .flatMap(rxBleConnection ->     rxBleConnection.writeCharacteristic(characteristicUuid, TxQueue.take))
                    .subscribe(bytes -> {
                        onWriteSuccess(bytes);
                    }, this::onWriteFailure);

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

您的第一个解决方案可以正常使用。

RxAndroidBle库正在处理为您排队的命令,因此您唯一需要做的就是subscribe()RxBleConnection.writeCharacteristic()

Stackoverflow上也有类似的问题: RxAndroidBle keeping a persistant connection + Write/Notification handling

最好的问候