まず、RxAndroidBLEライブラリを使用してBLE接続を管理しています。同時に2つのBLEデバイスから効率的に温度を読み取るにはどうすればよいですか?
私は2つのSensorTag devicesを持っていて、同時に両方から温度を読みたいと思います。たとえば、両方のデバイスの温度を正確に500msごとに読み取って、2つのTextViewでユーザーに表示したいとします。
私のアプリは現在、正常にこのようなBLEデバイスの両方に接続します。
@OnClick(R.id.connectButton1)
public void connectFirstSensorTag(Button b) {
if (!isDeviceConnected(sensorTag1)) {
connectionObservable1 = sensorTag1.establishConnection(getApplicationContext(), false).compose(new ConnectionSharingAdapter());
}
connectionObservable1.subscribe(new Subscriber<RxBleConnection>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
updateStatus(statusTextView1, "SensorTag not found");
}
@Override
public void onNext(RxBleConnection rxBleConnection) {
updateStatus(statusTextView1, "Connected");
enableSensorTagTemperatureSensor(connectionObservable1);
}
});
}
@OnClick(R.id.connectButton2)
public void connectSecondSensorTag(Button b) {
if (!isDeviceConnected(sensorTag2)) {
connectionObservable2 = sensorTag2.establishConnection(getApplicationContext(), false).compose(new ConnectionSharingAdapter());
}
connectionObservable2.subscribe(new Subscriber<RxBleConnection>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
updateStatus(statusTextView2, "SensorTag not found");
}
@Override
public void onNext(RxBleConnection rxBleConnection) {
updateStatus(statusTextView2, "Connected");
enableSensorTagTemperatureSensor(connectionObservable2);
}
});
}
は今、私は同時に500msごとの両方からの温度を読むための最良の方法を探しています。
今、私はこのような何かやってる:
connectionObservable1
.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(uuidFromShortCode("AA01")))
.subscribe(bytes -> {
// first temperature was successfully read here
connectionObservable2
.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(uuidFromShortCode("AA01")))
.subscribe(bytes -> {
// second temperature was successfully read here
}, error -> {
updateStatus(error.toString());
});
}, error -> {
updateStatus(error.toString());
});
をそしてこのコードブロックは、500msごとに呼び出される実行可能な内側にあります。
私はこれを行うには非常に非効率的な方法だと感じます。これを行うより良い方法があれば誰かに教えてもらえますか?
おそらく、読んだらいいえ?また、2つの匿名の "新しい加入者("(これを内部クラスとして抽出し、コンストラクタによって 'statusTextView1/2'を渡します) –