Flutter如何使用flutter_blue_plus插件实现蓝牙功能

我在使用Flutter开发一个需要蓝牙功能的APP,尝试了flutter_blue_plus插件但遇到一些问题:

  1. 如何正确初始化并扫描附近的蓝牙设备?
  2. 连接设备时总是失败,有哪些常见的连接错误需要排查?
  3. 读取和写入蓝牙特征值时需要注意什么?
  4. 如何监听设备断开连接或信号强度变化?
  5. 这个插件在iOS和Android上的兼容性如何?有没有特别需要注意的平台差异?
    希望能得到具体的代码示例和最佳实践建议。
2 回复

使用flutter_blue_plus实现蓝牙功能步骤:

  1. 添加依赖:flutter_blue_plus: ^1.0.0
  2. 配置权限:Android需蓝牙和定位权限,iOS需NSBluetoothAlwaysUsageDescription
  3. 基本使用:
    • 扫描设备:FlutterBluePlus.scan()
    • 连接设备:device.connect()
    • 发现服务:device.discoverServices()
    • 读写特征值:characteristic.write()/read()

注意:需处理连接状态和错误回调。

更多关于Flutter如何使用flutter_blue_plus插件实现蓝牙功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 使用 flutter_blue_plus 插件实现蓝牙功能的步骤如下:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter_blue_plus: ^1.0.0

运行 flutter pub get 安装。

2. 配置权限

Android:

  • android/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" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  • 对于 Android 12+,添加 BLUETOOTH_CONNECT 权限。

iOS:

  • ios/Runner/Info.plist 中添加:
<dict>
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>需要蓝牙权限以连接设备</string>
</dict>

3. 基本功能实现

初始化与权限检查:

import 'package:flutter_blue_plus/flutter_blue_plus.dart';

// 检查蓝牙状态
FlutterBluePlus.adapterState.listen((state) {
  if (state == BluetoothAdapterState.on) {
    print("蓝牙已开启");
  }
});

// 请求权限(Android 需要)
await FlutterBluePlus.requestPermissions();

扫描设备:

List<ScanResult> devices = [];

// 开始扫描
FlutterBluePlus.startScan(timeout: Duration(seconds: 10));

// 监听扫描结果
var subscription = FlutterBluePlus.scanResults.listen((results) {
  devices = results;
  for (var result in results) {
    print("发现设备: ${result.device.localName} - ${result.device.remoteId}");
  }
});

// 停止扫描
FlutterBluePlus.stopScan();

连接设备:

BluetoothDevice device = devices[0].device; // 选择设备
await device.connect();
print("已连接至: ${device.localName}");

发现服务与特征:

List<BluetoothService> services = await device.discoverServices();
for (var service in services) {
  for (var characteristic in service.characteristics) {
    print("特征: ${characteristic.uuid}");
  }
}

读写数据:

BluetoothCharacteristic char = ...; // 获取特征

// 读取数据
List<int> value = await char.read();

// 写入数据
await char.write([0x01, 0x02]);

// 监听通知
await char.setNotifyValue(true);
char.onValueReceived.listen((value) {
  print("收到数据: $value");
});

4. 断开连接

await device.disconnect();

注意事项:

  • 真机测试:蓝牙功能需在真机上测试。
  • 权限处理:动态请求位置权限(Android 6.0+)。
  • 设备过滤:扫描时可通过 withServices 参数过滤特定服务设备。

通过以上步骤,可完成蓝牙设备的扫描、连接、数据读写等核心功能。

回到顶部