如何解决如何使用 RxAndroidBle 调用多个 setupIndication
我正在尝试在触发 rxBleConnection.setupIndication(UUID)
后读取值我有很多 characteristics
UUIDs
并且我想使用 RxJava 排队,这样我就可以获得统一的值我们使用 Single.Zip
或 Observable.zip
例如,使用 RxAndroidBle
我们可以读取多个特征,是否可以对 setupIndication
执行相同的操作。由于 setupIndication
返回 Observable<Observable<byte[]>>
,我猜是不可能压缩的。
here is the library that I am using
我的期望
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.
}
);
目前,我必须为所有 5 个字符执行 setupIndication
。
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
解决方法
排列所有指示的最简单方法是将指示 observable 平面映射为单个指示。请记住,当所有指示 observable 将发出时,订阅块的每次发射都会发生。
使用 NotificationSetupMode.QUICK_SETUP
不会错过响应设置客户端特征配置 (CCC) 描述符而发生的排放。
Disposable disposable = device.establishConnection(false)
.flatMap(rxBleConnection -> Observable.zip(
rxBleConnection.setupIndication(UUID1,NotificationSetupMode.QUICK_SETUP).flatMap(it -> it),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.
}
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。