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

Flutter蓝牙消息收发、BLE连接异常及Nearby Connections适配咨询

问题解答

一、flutter_blue_plus实现BLE字符串收发与消息监听

1. 服务/特征选择

BLE通信基于GATT架构,推荐使用通用串口类UUID(适配字符串传输场景)或自定义UUID,两端必须保持一致:

  • 服务UUID:0000FFE0-0000-1000-8000-00805F9B34FB(通用蓝牙串口服务)
  • 特征UUID:0000FFE1-0000-1000-8000-00805F9B34FB(对应串口读写特征)
    注意需为特征开启notify或indicate属性,用于主动推送消息给连接方。

2. 收发字符串步骤

外设端(广播服务的设备)

  • 创建服务与特征,设置特征属性为read+write+notify
  • 监听特征的写入事件,将字节数据转换为字符串:
// 监听特征写入事件
characteristic.onValueReceived.listen((value) {
  String receivedMsg = utf8.decode(value);
  // 处理收到的字符串
});

中心端(发起连接的设备)

  • 扫描并连接外设后,定位到目标服务与特征
  • 将字符串转为Uint8List写入特征完成发送:
String sendMsg = "Hello BLE";
await characteristic.write(utf8.encode(sendMsg), withoutResponse: false);

3. 监听对方消息

中心端订阅特征的notify功能,即可实时接收外设推送的消息:

// 启用特征的notify功能
await characteristic.setNotifyValue(true);
// 监听消息流
characteristic.onValueReceived.listen((value) {
  String receivedMsg = utf8.decode(value);
  // 处理收到的消息
});

二、nearby_connections API与BLE的兼容性

Nearby Connections API支持BLE作为连接方式之一,但它是高层封装的跨设备通信框架,并非直接操作BLE的GATT服务/特征:

  • 若优先遵循标准BLE GATT架构开发,flutter_blue_plus更适配,因为它直接暴露GATT的服务、特征、描述符操作
  • Nearby Connections的BLE模式适合快速实现设备发现与简单数据传输,无需手动管理GATT结构,但灵活性远低于原生BLE库

三、连接后立即断开的问题分析

从日志来看,核心问题是UUID不匹配:

  • 日志中的UUID 00001101-0000-1000-8000-00805F9B34FB是经典蓝牙(BR/EDR)的SPP串口服务UUID,而非BLE的GATT服务UUID
  • flutter_blue_plus是BLE专用库,用它连接经典蓝牙的SPP服务会导致协议不兼容,触发连接断开与read failed异常

其他可能原因:

  • 安卓设备未授予位置权限(BLE扫描/连接需依赖位置权限)
  • 设备蓝牙模块兼容性问题,或两端蓝牙版本差异过大

解决建议:

  • 切换为BLE标准的服务/特征UUID(如前文推荐的FFE0/FFE1)
  • 确保两端均使用flutter_blue_plus实现BLE通信,避免混合经典蓝牙与BLE协议

内容的提问来源于stack exchange,提问作者Dev.eloper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:45:23