You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

flutter_reactive_ble读取BLE特征报GATT未知错误解决方案

问题根因

报错的核心原因是你对Nordic UART Service的特征功能、操作权限理解错误,对不支持读操作的特征调用了readCharacteristic接口,触发GATT操作异常。
你自己通过nRF Connect核对的特征属性已经明确了权限边界:

  • RX特征(UUID: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E):仅支持WRITE、WRITE NO RESPONSE属性,是设备侧接收数据的通道,对应手机端写数据发指令的场景,完全没有读权限,直接调用读接口必然报错
  • TX特征(UUID: 6E400003-B5A3-F393-E0A9-E50E24DCCA9E):仅支持NOTIFY属性,是设备侧发送数据的通道,对应手机端接收设备数据的场景,同样不支持直接read操作,必须订阅通知才能拿到设备推送的数据

你的代码错误点有两个:

  1. 把仅支持写的RX特征当成了读数据的目标
  2. 试图用read接口读取仅支持通知的NUS接收通道,完全不符合BLE特征的操作规则
修复步骤

1. 实现设备数据接收逻辑(替换原有的错误读特征代码)

针对TX特征订阅通知,监听设备主动推送的数据,这是NUS协议下接收数据的唯一正确方式:

// 定义数据接收用的TX特征
final _txCharacteristic = QualifiedCharacteristic(
  serviceId: _UART_UUID,
  characteristicId: _UART_TX,
  deviceId: event.deviceId,
);

// 订阅通知,持续接收设备发来的数据
final _subscription = flutterReactiveBle.subscribeToCharacteristic(_txCharacteristic)
  .listen((data) {
    // data为Uint8List格式的设备上行数据,在这里处理业务逻辑
    _numberOfMessagesReceived++;
    _receivedData.addAll(data);
    print("收到设备上行数据:$data");
  }, onError: (dynamic error) {
    print("特征订阅失败:$error");
  });

// 页面销毁/断开连接时记得取消订阅,避免内存泄漏
// _subscription.cancel();

2. 正确使用RX特征实现下行发数据

如果需要给设备发送指令,对RX特征调用写接口即可:

// 定义发数据用的RX特征
final _rxCharacteristic = QualifiedCharacteristic(
  serviceId: _UART_UUID,
  characteristicId: _UART_RX,
  deviceId: event.deviceId,
);

// 示例:向设备发送字节指令
final List<int> sendData = [0x01, 0x03, 0x00, 0x00]; // 替换为实际业务指令
await flutterReactiveBle.writeCharacteristicWithResponse(
  _rxCharacteristic,
  value: sendData
);
// 不需要设备应答的场景可以调用writeCharacteristicWithoutResponse接口
额外注意事项
  • BLE所有特征操作必须严格匹配特征声明的属性:带READ权限才能调用读接口,带WRITE/WRITE NO RESPONSE权限才能调用写接口,带NOTIFY/INDICATE权限才能订阅通知,权限不匹配会直接抛出GATT操作异常
  • Nordic UART的RX/TX命名是站在设备视角定义的:RX是设备接收(手机发)、TX是设备发送(手机收),不要站在手机端视角搞反收发方向
  • 部分安卓机型在BLE连接刚建立时GATT链路不稳定,可以在连接成功后加200ms左右的延迟再执行服务发现、特征订阅操作,降低偶发异常概率

内容的提问来源于stack exchange,提问作者Henrique Guimarães

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:36:29