您好我正在尝试用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);
感谢您的回答!
答案 0 :(得分:0)
您的第一个解决方案可以正常使用。
RxAndroidBle库正在处理为您排队的命令,因此您唯一需要做的就是subscribe()
到RxBleConnection.writeCharacteristic()
。
Stackoverflow上也有类似的问题: RxAndroidBle keeping a persistant connection + Write/Notification handling
最好的问候