如何通过服务UUID逐步连接BLE设备并发送MTU请求并获取服务的特征UUID

时间:2020-06-01 05:04:15

标签: android rxandroidble

我正在使用RxAndroidBle library连接到android设备,但找不到任何方法来连接BLE设备并发送MTU请求并通过一次服务UUID通过服务UUID获取服务的特征UUID

描述问题

我需要连接BLE设备并发送MTU请求,并通过Service UUID逐步获取服务的特征UUID

要复制

重现行为的步骤:

  1. 通过名称或mac地址查找BLE设备
  2. 发送MTU请求517
  3. 通过服务UUID获取服务
  4. 通过特征UUID获取特征值

其他上下文 我无法结合所有方法,也无法一个接一个地调用

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);
                    }
            );
}

0 个答案:

没有答案