Android 如何连接可编程设备&;发送MTU请求,通过服务UUID逐步获取服务的特征UUID
我正在使用连接到android设备,但我找不到任何方法来连接BLE设备并发送MTU请求,并在一次请求中通过服务UUID获取服务的特征UUID 描述问题 我需要连接BLE设备并发送MTU请求,并通过服务UUID一步一步地获取服务的特征UUID 复制 复制行为的步骤:Android 如何连接可编程设备&;发送MTU请求,通过服务UUID逐步获取服务的特征UUID,android,rxandroidble,Android,Rxandroidble,我正在使用连接到android设备,但我找不到任何方法来连接BLE设备并发送MTU请求,并在一次请求中通过服务UUID获取服务的特征UUID 描述问题 我需要连接BLE设备并发送MTU请求,并通过服务UUID一步一步地获取服务的特征UUID 复制 复制行为的步骤: 按名称或mac地址查找可扩展设备 发送MTU请求517 通过服务UUID获取服务 通过特征UUID获取特征值 附加上下文 我无法组合所有方法,无法逐个调用 private Observable<RxBleConnection&g
private Observable<RxBleConnection> connectionObservable;
private PublishSubject<Boolean> disconnectTriggerSubject = PublishSubject.create();
private void connect() {
Disposable disposable = connectionObservable
.flatMapSingle(rxConn -> rxConn.requestMtu(RxBleConnection.GATT_MTU_MAXIMUM))
.doOnComplete(() -> {
Disposable notifDisposable = connectionObservable.doOnNext(rxBleConnection -> {
Single<Integer> mtu = rxBleConnection.requestMtu(RxBleConnection.GATT_MTU_MAXIMUM);
Log.w("TAG_TAG", "notif --> Mtu: " + rxBleConnection.getMtu());
}).flatMapSingle(RxBleConnection::discoverServices)
.flatMapSingle(rxBleDeviceServices -> rxBleDeviceServices.getCharacteristic(CHARACTERISTIC_UUID))
.doOnComplete(() -> {
Disposable reedDisposable = connectionObservable.flatMapSingle(RxBleConnection::discoverServices)
.flatMapSingle(rxBleDeviceServices -> rxBleDeviceServices.getCharacteristic(CHARACTERISTIC_UUID))
.subscribe(
characteristic -> {
Log.w("TAG_TAG", "reed --> Value: " + Arrays.toString(characteristic.getValue()));
if (characteristic.getValue() != null) {
Log.w("TAG_TAG", "reed --> Value: " + characteristic.getValue().length + " , HexString: " + toHexString(characteristic.getValue()));
}
},
this::onConnectionFailure,
this::onConnectionFinished
);
})
.subscribe(
characteristic -> {
Log.w("TAG_TAG", "notif --> Value: " + Arrays.toString(characteristic.getValue()));
if (characteristic.getValue() != null) {
Log.w("TAG_TAG", "notif --> Value: " + characteristic.getValue().length + " , HexString: " + toHexString(characteristic.getValue()));
}
},
this::onConnectionFailure,
this::onConnectionFinished
);
})
.subscribe(
integer -> {
Log.w("TAG_TAG", "connect --> Integer: " + integer);
}
);
}
私有可观察连接可观察;
private PublishSubject disconnectTriggerSubject=PublishSubject.create();
专用void connect(){
一次性=可观察的连接
.flatMapSingle(rxConn->rxConn.requestMtu(rxbeconnection.GATT\u MTU最大值))
.doOnComplete(()->{
一次性通知一次性=可观察的连接。doOnNext(rxbeconnection->{
单个mtu=rxBleConnection.requestMtu(rxBleConnection.GATT\u mtu最大值);
Log.w(“TAG_TAG”,“notif-->Mtu:+rxbeconnection.getMtu());
}).flatMapSingle(RXbeConnection::discoverServices)
.flatMapSingle(rxBleDeviceServices->rxBleDeviceServices.getCharacteristic(CHARACTERISTIC_UUID))
.doOnComplete(()->{
一次性reedDisposable=connectionObservable.flatMapSingle(RxBleConnection::discoverServices)
.flatMapSingle(rxBleDeviceServices->rxBleDeviceServices.getCharacteristic(CHARACTERISTIC_UUID))
.订阅(
特征->{
Log.w(“TAG_TAG”,“reed-->值:”+Arrays.toString(characteristic.getValue());
if(characteristic.getValue()!=null){
Log.w(“TAG_TAG”,“reed-->Value:+characteristic.getValue().length+”,HexString:+toHexString(characteristic.getValue()));
}
},
此::onConnectionFailure,
此::OnConnection已完成
);
})
.订阅(
特征->{
Log.w(“TAG_TAG”,“notif-->值:”+Arrays.toString(characteristic.getValue());
if(characteristic.getValue()!=null){
Log.w(“TAG_TAG”,“notif-->值:”+characteristic.getValue().length+”,HexString:“+toHexString(characteristic.getValue()));
}
},
此::onConnectionFailure,
此::OnConnection已完成
);
})
.订阅(
整数->{
Log.w(“TAG_TAG”,“connect-->Integer:+Integer”);
}
);
}
您的问题很不清楚。您似乎正在尝试按顺序执行多个GATT操作?Android有一个限制,一次只能有一个挂起的操作。例如,如果您调用requestMtu,您需要等待onMtuChanged到达,然后才能读取特征值。@Emil connect Using RxAndroidBle library,post updated,感谢您的评论我无法组合所有方法,无法逐个调用-为什么?你的意思是——你不知道如何做到这一点?你能发布你已经尝试过的代码吗?@DariuszSeweryn是的,我找不到任何完整的样本这是一个RxJava
问题,而不是RxAndroidBle
问题(因为你需要以你想要的方式编写可观察的,单一的和可完成的
)RxAndroidBle
负责Android BLE堆栈上的命令排队。您的问题非常不清楚。您似乎正在尝试按顺序执行多个GATT操作?Android有一个限制,一次只能有一个挂起的操作。例如,如果您调用requestMtu,您需要等待onMtuChanged到达,然后才能读取特征值。@Emil connect Using RxAndroidBle library,post updated,感谢您的评论我无法组合所有方法,无法逐个调用-为什么?你的意思是——你不知道如何做到这一点?你能发布你已经尝试过的代码吗?@DariuszSeweryn是的,我找不到任何完整的样本这是一个RxJava
问题,而不是RxAndroidBle
问题(因为你需要以你想要的方式编写可观察的,单一的和可完成的
)RxAndroidBle
负责将命令排队到Android BLE堆栈上。