0

RxAndroidBleを使用して人工呼吸器のリモコンとして機能するアプリをやっています。unsubscribe使用するときに問題があります

.flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(Uuids.UUID_RX, flaktCommandConcat.getBytes()))

その後、常に最初に実行され、データが送信される前に接続が切断されるsubscription.unsubscribe();ため、writeCharacteristicsを使用しても機能しません。unsubscribe

私が必要とするのは:

  • ボタンをクリックすると人工呼吸器に接続したい
  • 次に、すべての値を送信します
  • そして、切断します。
  • 手順を繰り返すと、同じことを何度も繰り返す必要があります。

誰かがアイデアを手伝ってくれますか?使用.delay(1000, Time.MILISECONDS)してみましたが、人工呼吸器に情報を送信するのに時間がかかりました。

これは私のコードです:

 public void writeRxCharacteristics(String flaktCommandConcat){

    rxBleDevice = rxBleClient.getBleDevice(Uuids.DEVICE_ADDRESS);


    subscription = rxBleDevice.establishConnection(true) //false
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(rxBleConnection -> rxBleConnection.createNewLongWriteBuilder()
            .setCharacteristicUuid(Uuids.UUID_RX)
            .setBytes(flaktCommandConcat.getBytes())
            .build())

            .subscribe(
                    byteArray -> {
                        Log.d("CharacteristicValue","WRITE: " + Arrays.toString(byteArray));
                    },

                    throwable -> {
                        Log.d("CharacteristicValue","Throwable: " + throwable.toString());
                        rxBleActivity.onScanFailure(throwable, getContext());
                    }
            );


    rxBleDevice.observeConnectionStateChanges()
            .observeOn(AndroidSchedulers.mainThread())
            .delay(1000, TimeUnit.MILLISECONDS)
            .subscribe(
                    rxBleConnectionState -> {
                        Log.d("RxBleConnectionState", " CON_STATUS: " + rxBleConnectionState);
                        disconnect();

                    },
                    throwable -> {
                        Log.d("ConnectionStateChanges","Throwable: " + throwable.toString());

                    }
            );
}
public void disconnect() {
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
subscription = null;
}
Log.d("CONNECTION2", " CON_STATUS: " + rxBleDevice.getConnectionState().toString());
}
4

1 に答える 1