我正在构建一个从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));
现在,有没有办法在循环中下载所有特征???
答案 0 :(得分:1)
按顺序调用readCharacteristic(无延迟)将不起作用。
在启动第二个电话之前,您必须等待onCharacteristicRead第一个电话。
使用connectGatt连接BLE设备时,必须提供BluetoothGattCallback。在BluetoothGattCallback对象中实现onCharacteristicRead,它将在每个readCharacteristic实际完成后调用。在该函数内部,您应该读取队列中的下一个特征,直到没有。