Я пытаюсь прочитать значение после запуска rxBleConnection.setupIndication(UUID)
У меня много characteristics
UUIDs
, и я хочу выстроиться с использованием RxJava таким образом, чтобы я мог получать консолидированные значения точно так же, как мы получаем, используя Single.Zip
или Observable.zip
Например, используя RxAndroidBle
, мы можем прочитать несколько характеристик, возможно ли сделать то же самое для setupIndication
. Поскольку setupIndication
возвращает Observable<Observable<byte[]>>
, я думаю, невозможно заархивировать.
вот библиотека, которую я использую
Что я ожидаю
Disposable disposable = device.establishConnection(false)
.flatMap(rxBleConnection -> Observable.zip(
rxBleConnection.setupIndication(UUID1),
rxBleConnection.setupIndication(UUID2),
rxBleConnection.setupIndication(UUID3),
rxBleConnection.setupIndication(UUID4),
BLEReading::new
))
.subscribe(
model -> {
// Process your model.
Log.e(TAG , "FINAL DATA ");
},
throwable -> {
// Handle an error here.
}
);
В настоящее время я должен выполнить setupIndication
для всех 5 символов.
connectDisposible = device.establishConnection(false)
.flatMap(rxBleConnection->rxBleConnection.setupIndication(UUID1))
.flatMap(notificationObservable -> notificationObservable)
.subscribe(
bytes -> {
Log.e(TAG,"Notification bytes"+Arrays.toString(BLEUtils.toHex(bytes)));
},
throwable -> {
Log.e(TAG,"Notification Error "+throwable.getMessage());
}
);
Изменить
connectDisposible = device.establishConnection(false)
.flatMap(rxBleConnection -> Observable.zip(
rxBleConnection.setupIndication(UUID1).flatMap(it -> it),
rxBleConnection.setupIndication(UUID2).flatMap(it -> it),
rxBleConnection.setupIndication(UUID3).flatMap(it -> it),
rxBleConnection.setupIndication(UUID4).flatMap(it -> it),
rxBleConnection.setupIndication(UUID5).flatMap(it -> it),
BLEReading::new
))
.subscribe(
model -> {
//control never reaches here
Log.e(TAG , "FINAL DATA "+model);
},
throwable -> {
// Handle an error here.
Log.e(TAG , "error"+throwable.getMessage());
}
);
однако в logcat я могу успешно установить показания.
setCharacteristicNotification() - uuid: 705f68f7-83c9-6562-b2c5 enable: true
setCharacteristicNotification() - uuid: 314fae3a-d0cf-51c4-4a67 enable: true
setCharacteristicNotification() - uuid: 8599c5ba-f827-2d16-ce14 enable: true
setCharacteristicNotification() - uuid: 6fbba050-e87b-6ea8-6e5d enable: true
Single.zip
иObservable.zip
генерируют события, когда будут генерироваться все источники. Таким образом, имея эквивалент в вашем случае, вы получите только одно излучение — поскольку A, B, C излучают только один раз. - person Dariusz Seweryn   schedule 29.12.2020rxBleConnection.setupIndication(UUID1)
просто испускаетObservable<Observable<byte[]>>
, а неSingle<byte[]>
, так как мы можем справиться с этим вZip
- person Hunt   schedule 29.12.2020