我正在尝试在我的APP中阅读一些蓝牙特性。 现在我有一个问题,在我的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数据?或者在我的App端更新它?
如果您需要任何其他代码,请告知我们。
答案 0 :(得分:1)
读取GATT特征是一种异步操作。在收到onCharacteristicRead回调后,结果才可用。
无论如何,您应该将GATT服务器配置为在发送新数据时发送notifications,而不是一直轮询它。