
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设备在扫描时对设备名称的获取可能不稳定。测试时务必在两台真机上进行。