flutter如何实现bluetooth_low_energy功能

在Flutter中如何实现Bluetooth Low Energy(BLE)功能?目前尝试使用flutter_blue_plus插件,但遇到设备扫描不到和数据读写不稳定的问题。具体场景是:需要连接智能手环获取健康数据,但扫描时只能发现部分设备,且连接后经常断开。请问正确的BLE开发流程是什么?有哪些常见坑点和优化建议?官方示例代码似乎对Service/Characteristic的处理不够完善,如何高效完成UUID配置和数据解析?

2 回复

使用Flutter实现BLE功能,需借助flutter_blue_plus插件。步骤如下:

  1. 添加依赖到pubspec.yaml;
  2. 申请蓝牙权限;
  3. 扫描设备、连接、读写特征值;
  4. 处理连接状态和数据回调。

注意:需配置iOS的NSBluetoothAlwaysUsageDescription和Android的BLUETOOTH权限。

更多关于flutter如何实现bluetooth_low_energy功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中实现蓝牙低功耗(BLE)功能,主要通过第三方插件 flutter_blue_plus 实现。以下是基本步骤和示例代码:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter_blue_plus: ^1.30.0

运行 flutter pub get 安装。

2. 配置权限

Androidandroid/app/src/main/AndroidManifest.xml):

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

iOSios/Runner/Info.plist):

<dict>
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>需要蓝牙权限以连接设备</string>
</dict>

3. 基本使用代码

import 'package:flutter_blue_plus/flutter_blue_plus.dart';

class BluetoothManager {
  // 扫描设备
  void startScan() {
    FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
    FlutterBluePlus.scanResults.listen((results) {
      for (ScanResult r in results) {
        print('发现设备: ${r.device.localName} - ${r.device.remoteId}');
      }
    });
  }

  // 连接设备
  Future<void> connectToDevice(BluetoothDevice device) async {
    await device.connect();
    print("已连接至: ${device.localName}");
    
    // 发现服务
    List<BluetoothService> services = await device.discoverServices();
    for (var service in services) {
      print("服务 UUID: ${service.uuid}");
    }
  }

  // 读取特征值
  Future<void> readCharacteristic(BluetoothCharacteristic characteristic) async {
    List<int> value = await characteristic.read();
    print('特征值: $value');
  }
}

4. 注意事项

  • 需要动态申请位置权限(Android 6.0+)。
  • iOS 需在物理设备上测试,模拟器不支持蓝牙。
  • 连接前请确认目标设备的 BLE 服务和特征 UUID。

5. 常用操作

  • 停止扫描FlutterBluePlus.stopScan()
  • 断开连接device.disconnect()
  • 写入数据characteristic.write(data)

通过以上代码即可实现 BLE 设备扫描、连接和数据读写。建议参考官方文档获取更详细说明:https://pub.dev/packages/flutter_blue_plus

回到顶部