我正在使用安卓5.1(蓝牙4.0)的Android设备和具有蓝牙4.2的MCU主板。
在我的MCU端,我正在更新循环中的Gatt特性,以确保,我知道我写的数据是否一致。在我在gatt数据库中写它之前我正在使用crc检查。
在我的机器人方面我只是有一个线程,它读取gatt数据库中的特征,然后直接我有相同的crc但似乎50%的值是腐败的(这是没有意义的我侧)。 我知道我在我的gatt数据库中写的数据是正确的所以我想问题是在一个线程中多次读取该特性。
我已经尝试通过我的android端的通知读取特性,但bluetoothleservice永远不会跳进OnCharacteristicChanged回调。
我的特色更新看起来像这样
tmpGatt.readCharacteristic(characteristic);
并且特征在u之前被过滤
for(int i = 0; i<Services.size(); i++){
Characteristics = Services.get(i).getCharacteristics();
for(int c=0;c < Characteristics.size();c++){
UUID myUUID = Characteristics.get(c).getUuid();
if(myUUID.toString().equals("354a1b8e-7597-11e6-8b77-86f30ca893d3")){
characteristic = Characteristics.get(c);
//refExternalData.getRefBluetoothGatt().readCharacteristic(characteristic);
descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
Log.i("BLE", "Characteristic " + myUUID.toString() + " found");
}
}
}
所以我需要做一些特别的事情来重新阅读gattcharacteristic吗?
答案 0 :(得分:1)
您是否按照https://developer.android.com/guide/topics/connectivity/bluetooth-le.html#notification中的步骤启用了通知?
当您发出readCharacteristic
时,在获得readCharacteristic
之前,您不能发出新的onCharacteristicRead
。或者实际上,您不能发送任何新请求(readCharacteristic
,writeCharacteristic
,readDescriptor
,writeDescriptor
),直到之前的请求完成为止。这是因为一次只能有一个未完成的GATT请求,并且没有内部队列。