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);

    }

そして、デバイスへの接続中にこれを1回だけ呼び出します:

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

答えてくれてありがとう!

4

1 に答える 1

0

最初のソリューションは問題なく機能します。

RxAndroidBle ライブラリがコマンドのキューイングを処理しているため、必要なことsubscribe()RxBleConnection.writeCharacteristic().

Stackoverflow にも同様の質問があります: RxAndroidBle keep a persistant connection + Write/Notification handling

よろしくお願いします

于 2016-08-25T15:09:06.647 に答える