我正在尝试在我的应用程序中读取一些蓝牙特性。 现在我有一个问题,在我的 Gatt 服务器的特征发生更改后该怎么办。起初,我尝试使用线程一次又一次地重新触发对特征的读取,如下所示:
new Thread(new Runnable() {
@Override
public void run() {
int[] newData = new int[30];
while(true){
try{
for(int i=0;i<newData.length;i++){
newData[i] = 0;
}
BluetoothGatt tmpGatt = refExtDataClass.getRefBluetoothGatt();
tmpGatt.readCharacteristic(characteristic);
byte[] value = characteristic.getValue();
for(int i=0;i<newData.length;i++){
newData[i] = value[i];
}
refExtDataClass.setNmData(newData);
}catch(Exception e){
break;
}
}
}
}).start();
但问题是,数据似乎在某一时刻已损坏(就像我总是从 MCU 端将相同的数据写入特征中一样)。
允许这样读取BLE数据吗?有什么建议的方法可以一直读取BLE数据吗?或者在我的应用程序端更新它?
如果您需要任何其他代码,请告诉我。
最佳答案
读取 GATT 特性是一个异步操作。在您收到onCharacteristicRead之前,结果不可用。回调。
无论如何,您应该将 GATT 服务器配置为发送 notifications当有新数据要发送时,而不是一直轮询。
关于Android BLE 读取 Gatt 特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39741741/