我使用了flutter blue插件来读取特征值,但是读取过程中始终会出现错误
readCharacteristics() {
device.discoverServices().then((services) {
services.forEach((_service) {
_service.characteristics.forEach((c) {
device.readCharacteristic(c).then((value) {
print('value is $value');
});
});
});
});
}
我希望输出是特征值,但出现此错误==>未处理的异常:PlatformException(read_characteristic_error,未知原因,如果在上次读取完成之前调用readCharacteristic,则可能会发生。)
答案 0 :(得分:0)
device.readCharacteristic(c).then((value)
是一个异步调用,其结果将在以后处理。这可能会造成一种情况,当您没有读取任何一对返回值时,您将它们称为一对读取,读取需要同步进行。尝试用forEach
替换所有for (final x in iterable)
,然后可以在每个await
上readCharacteristic
,以便它们同步发生。
答案 1 :(得分:0)
请勿同时执行读写操作。我使用互斥锁概念来解决此问题。 我建议在任何时间仅执行一次写入或读取。同步读写操作
答案 2 :(得分:0)
你可以这样做:
if(isReading == false){
isReading = true;
await bluetoothCharacteristic.read();
isReading = false;
}
它会阻止你同时阅读