flutter如何连接蓝牙设备

在Flutter中如何连接蓝牙设备?我尝试使用flutter_blue插件,但发现文档不太清晰,不知道如何扫描设备并建立连接。具体流程应该是怎样的?是否需要额外的权限配置?在Android和iOS平台上的实现方式是否有差异?求有经验的大佬分享完整代码示例和常见问题解决方案。

2 回复

Flutter连接蓝牙设备可使用flutter_blue插件。步骤:

  1. 添加依赖到pubspec.yaml
  2. 申请蓝牙权限
  3. 扫描设备
  4. 连接并通信

注意:iOS需在Info.plist添加蓝牙使用描述,Android需位置权限。

更多关于flutter如何连接蓝牙设备的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中连接蓝牙设备,主要使用 flutter_blue_plus 库(推荐,支持多平台)或 flutter_blue(旧版)。以下是使用 flutter_blue_plus 的步骤和示例代码:

步骤:

  1. 添加依赖:在 pubspec.yaml 中添加:

    dependencies:
      flutter_blue_plus: ^1.0.0
    

    运行 flutter pub get

  2. 配置权限(Android/iOS):

    • 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" />
      
    • iOS:在 ios/Runner/Info.plist 中添加:
      <dict>
        <key>NSBluetoothAlwaysUsageDescription</key>
        <string>需要蓝牙权限以连接设备</string>
      </dict>
      
  3. 代码实现

    • 扫描设备
      FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
      var subscription = FlutterBluePlus.scanResults.listen((results) {
        for (ScanResult r in results) {
          print('发现设备: ${r.device.name} - ${r.device.remoteId}');
        }
      });
      
    • 连接设备
      BluetoothDevice device = ...; // 从扫描结果获取设备
      await device.connect();
      print("已连接");
      
    • 发现服务与特征
      List<BluetoothService> services = await device.discoverServices();
      for (var service in services) {
        for (var characteristic in service.characteristics) {
          // 读取或写入特征值
        }
      }
      
    • 断开连接
      await device.disconnect();
      

注意事项:

  • 在真实设备上测试,模拟器不支持蓝牙。
  • 处理连接状态变化(如监听 device.connectionState)。
  • 读写数据前确保特征支持对应操作(如 read/write/notify)。

通过以上步骤,即可实现蓝牙设备的扫描、连接及数据交互。

回到顶部