BLE如何从设备下载所有数据?

Posted

技术标签:

【中文标题】BLE如何从设备下载所有数据?【英文标题】:BLE how to downlaod all data from device? 【发布时间】:2018-02-22 09:04:35 【问题描述】:

我正在构建一个从 BLE 设备下载所有信息的应用。此 BLE 设备有两个特征可供读取。

我应该读取这些特性,直到 BLE 设备有数据存储。所以我创建了一个循环,等到BLE设备有数据,我调用方法readCharacteristic。

所以我创建了一个具有我特征的队列来阅读。这是代码:

if(ReadQueue!= null && ReadQueue.size()>0)
                        new Thread(new Runnable() 
                            @Override
                            public void run() 
                                int index =0;
                                for(index=0; index < ReadQueue.size(); index++)
                                    mGatt.readCharacteristic(ReadQueue.get(index));
                                

                            
                        ).start();
                    

但是使用这段代码,我只能读取第一个特征,如果我在这行之后调用 sleep,我可以读取所有特征。

 mGatt.readCharacteristic(ReadQueue.get(index));

现在,有没有办法循环下载所有特征???

【问题讨论】:

【参考方案1】:

按顺序(无延迟)调用 readCharacteristic 将不起作用。

您必须等待onCharacteristicRead 才能拨打第二个电话。

当您使用 connectGatt 连接到 BLE 设备时,您必须提供 BluetoothGattCallback。在该 BluetoothGattCallback 对象中实现 onCharacteristicRead,它将在每个 readCharacteristic 实际完成后调用。在该函数中,您应该读取队列中的下一个特征,直到没有。

【讨论】:

我怎么能等到 onCharacteristicRead 在启动第二个代码之前完成你的代码??? @bircastri 编辑以添加更多描述。如果您可以展示如何维护 ReadQueue 对象,也许我可以写一个简短的示例。

以上是关于BLE如何从设备下载所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的BLE设备获取实际值?

(java, bluetooth-low energy, ble) 如何通过 BLE 从 android 设备获取数据

如何从自定义 BLE 服务读取数据(例如智能手表)

如何从 BLE 制造商数据抖动中获取所需值

如何在android中将数据写入BLE设备

如何将 BLE 设备中的十六进制数据分解为可用数据? (速度和节奏)