嗨,我正在尝试使用 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);
感谢您的回答!