こんにちは、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);
}
そして、デバイスへの接続中にこれを1回だけ呼び出します:
connectionObservable
.flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(characteristicUuid, TxQueue.take))
.subscribe(bytes -> {
onWriteSuccess(bytes);
}, this::onWriteFailure);
答えてくれてありがとう!