首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时连接多个特征?

如何同时连接多个特征?
EN

Stack Overflow用户
提问于 2019-09-15 16:15:21
回答 2查看 546关注 0票数 0

我试图读和写的特点,特殊的服务,BLE设备。

这里我指的是来自RxAndroidBle的演示代码。

在本演示中,一旦发现服务,当您按下特定的特性时,它会进入下一个屏幕并进行连接,然后执行读/写操作。

我的问题是:在服务被发现后,有什么方法可以读/写任何特性吗?在读/写操作之前,为什么需要使用任何特征进行连接?

下面的代码用于连接单个特征,但我想同时连接3-4个特征。我尝试了.flatmap(),但是给了我错误。

代码语言:javascript
复制
  final Disposable connectionDisposable = connectionObservable
                            .flatMapSingle(RxBleConnection::discoverServices)
                            .flatMapSingle(rxBleDeviceServices -> rxBleDeviceServices.getCharacteristic(Consts.ALERT_LEVEL_UUID))
                            .observeOn(AndroidSchedulers.mainThread())
                            .doOnSubscribe(disposable -> text_connection.setText("Status: Connecting"))
                            .subscribe(
                                    characteristic -> {
                                        updateUI(characteristic);
                                        Log.i(getClass().getSimpleName(), "Hey, connection has been established!");
                                    },
                                    this::onConnectionFailure,
                                    this::onConnectionReceived
                            );

就像在下面的图像,只要你按R或W的任何特征,它将给你的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-18 11:26:58

我有工作要做。

用于连接

代码语言:javascript
复制
 Disposable disposable = connectionObservable
                            .flatMap(connection -> connection.discoverServices()
                                            .map(RxBleDeviceServices::getBluetoothGattServices)
                                            .flatMapObservable(Observable::fromIterable) // map to individual services
                                            .map(BluetoothGattService::getCharacteristics) // for each service take all characteristics)
                                            .flatMap(Observable::fromIterable) // map to individual characteristic)
                                    //.filter(characteristic -> (BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) != 0) // consider only characteristics that have indicate or notify property

                            )
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(
                                    characteristic -> {
                                        onConnectionReceived();
                               },
                                    this::onConnectionFailure,
                                    this::onConnectionReceived
                            );

                    compositeDisposable.add(disposable);

如果连接成功,则可以读取、写入和通知此单个连接中的任何特征。

有关读、写和通知,可以检查RxAndroidBle

票数 0
EN

Stack Overflow用户

发布于 2019-09-16 16:06:29

如果我理解你的问题,你可能会考虑使用杰克沃顿的ReplayingShare共享BLE连接。

下面是一些可能有用的讨论:https://github.com/Polidea/RxAndroidBle/issues/406

反应性纯粹主义者似乎认为,您应该能够用一条subscribe()语句来做任何您想做的事情,但我还不够聪明,无法弄清楚这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57945944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档