私はRxAndroidBleを使用してベンチレータのリモートコントロールとして動作するアプリをやっています。私は退会に関する問題
.flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(Uuids.UUID_RX, flaktCommandConcat.getBytes()))
を使用する場合ので、私はunsubscribe
に問題があり、常に最初unsubscribe
実行し、データの前に接続disconectが送信されたので、その後、私は仕事をdoesn't subscription.unsubscribe();
writeCharacteristicsを使用しています。私は必要なもの
は次のとおりです。
- 私はすべての値
- を送る[切断後、人工呼吸器
- に接続したいボタンをクリックします。
- この手順を繰り返すと、同じことを何度も何度も繰り返す必要があります。
いくつかのアイデアで私を助けることができますか? .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());
}
あなたの説明には「MILISECONDS」と記載されていますが、あなたのコードに 'MILLISECONDS'を使っています。もしそれらのスペルが間違っていたら、修正してください。 – halfer