Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何连接可编程设备&;发送MTU请求,通过服务UUID逐步获取服务的特征UUID_Android_Rxandroidble - Fatal编程技术网

Android 如何连接可编程设备&;发送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

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

描述问题

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

复制

复制行为的步骤:

  • 按名称或mac地址查找可扩展设备
  • 发送MTU请求517
  • 通过服务UUID获取服务
  • 通过特征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);
                        }
                );
    }
    
    私有可观察连接可观察;
    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堆栈上。