0

嗨,我正在尝试使用 RxJava 和 BLE 构建我的第一个应用程序,我有一个问题:我在单音类中创建了一个 wite(byte 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);

感谢您的回答!

4

1 回答 1

0

您的第一个解决方案可以正常工作。

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

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

此致

于 2016-08-25T15:09:06.647 回答