Flutter---BLE设备通信

BLE的工作原理

概念

在 Flutter 中实现低功耗蓝牙(BLE)功能,本质上是利用手机作为中心设备(Central),与外围设备(Peripheral,如心率带、智能灯等)进行通信。

在BLE通信中,存在两个主要角色

中心设备 (Central):通常指手机。它负责扫描、连接和管理外围设备。Flutter应用就扮演这个角色。

外围设备 (Peripheral) :通常指心率监测器、智能手环等低功耗设备。它们不断发送广播包(Advertising Packets) 来宣告自己的存在。

在Flutter中,需要借助三方插件(如 flutter_blue_plus、flutter_reactive_ble)作为桥梁,通过平台通道(Platform Channel) 调用iOS的CoreBluetooth和Android的BluetoothAdapter等原生API,实现对硬件的操作。

BLE开发的核心流程

①扫描设备

原理 :外围设备会在固定的3个广播信道(37、38、39)上发送数据包,中心设备在这些信道上扫描并捕获信息。

操作 :在Flutter中,调用 FlutterBluePlus.startScan() 方法,然后监听 scanResults 流来获取设备列表。通常可以按设备名称或服务UUID进行过滤。

②连接设备

原理 :中心设备会锁定外围设备的广播信道,并开始跳频到数据信道上进行通信,从而建立一条点对点的连接。

操作 :使用 device.connect() 方法。这是一个异步操作,需要注意连接状态的处理。

③发现服务与特征

设备能做什么(服务)以及怎么做(特征)

服务 (Service):是设备功能的集合,比如"电池服务"或"心率服务"。每个服务都有一个唯一的UUID。

特征 (Characteristic):是服务内部的最小数据单元。比如"心率服务"下会有一个"心率测量"特征。读写数据都是针对特征进行的。

操作 :调用 device.discoverServices() 获取所有服务,然后遍历并找到你需要操作的特征。每个特征都有其属性(Properties),定义了它支持的操作。

比如有这些属性

read:用来读取数据

write:用来写入数据

notify:用来订阅通知

indicate:指示,功能与notify差不多,但是需要接收方确认

④数据交互

读/写操作 :对于简单的开关或一次性读取,直接调用 characteristic.read() 或 characteristic.write()。

订阅通知 :对于需要持续监控的数据(如心率),你需要先开启通知 await characteristic.setNotifyValue(true),然后监听其 onValueReceived 流,当设备端有数据更新时,你会自动收到回调。

⑤具体协调

权限处理 :在Android上,除了蓝牙权限,还必须动态申请精确定位权限 ,因为扫描蓝牙会关联到位置信息。在iOS上,则需要在Info.plist中说明使用蓝牙的目的。

MTU 协商 :BLE单次传输的数据量有限(通常20字节)。如果需要传输大量数据(如图片、固件),可以通过 requestMtu 方法协商更大的传输单元(MTU),并进行数据的分包与组包处理。

平台差异:iOS和Android在蓝牙API行为上存在一些细微差别。例如,某些Android设备在扫描时对设备名称的获取可能不稳定。测试时务必在两台真机上进行。

相关推荐
恋猫de小郭11 小时前
Flutter 3.50 & Dart 3.14 发布,快来看看有什么更新吧
android·前端·flutter
喵个咪1 天前
GoWind CMS 拆解:Flutter 设计系统内核——双态 token、四档断点与自适应壳层
前端·flutter·交互设计
恋猫de小郭1 天前
Flutter 大小核优化又被回滚,然后又开新提案?
android·前端·flutter
好的佩奇2 天前
蓝牙之广播与扫描
android·flutter·蓝牙
wuxianda10302 天前
2026 苹果审核 4.3 (a) 被拒全解析|Guideline 4.3a spam 马甲包拒审原因 + 避坑方案
flutter·uni-app·苹果上架
恋猫de小郭2 天前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter
好的佩奇3 天前
Dart 之扩展类型
android·flutter·dart
恋猫de小郭3 天前
Flutter 下 AOT 一个你怎么都想不出来的 Bug ,JIT 正常的计算,在 AOT 居然算错了
android·前端·flutter
好的佩奇4 天前
Dart 之扩展方法
android·flutter·dart