Flutter如何使用flutter_blue_plus扫描蓝牙

在Flutter项目中集成flutter_blue_plus库后,如何正确实现蓝牙设备扫描功能?我按照官方文档初始化了插件并申请了权限,但调用startScan()后无法获取到周边设备。是否需要额外配置广播参数或扫描过滤器?请分享一个完整的设备扫描代码示例,包括权限处理、扫描启动/停止以及设备列表更新的实现逻辑。

2 回复

使用flutter_blue_plus扫描蓝牙步骤:

  1. 添加依赖到pubspec.yaml
  2. 请求蓝牙权限
  3. 初始化FlutterBluePlus
  4. 调用startScan()开始扫描
  5. 监听scanResults获取设备列表
  6. 使用stopScan()停止扫描

记得处理权限和错误处理。

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


在Flutter中使用flutter_blue_plus扫描蓝牙设备,步骤如下:

  1. 添加依赖
    pubspec.yaml中:

    dependencies:
      flutter_blue_plus: ^1.30.0
    
  2. 配置权限

    • Android:在android/app/src/main/AndroidManifest.xml中添加:
      <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
      <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      
    • iOS:在ios/Runner/Info.plist中添加:
      <key>NSBluetoothAlwaysUsageDescription</key>
      <string>需要蓝牙权限以扫描设备</string>
      
  3. 扫描蓝牙设备
    使用以下代码开始扫描:

    import 'package:flutter_blue_plus/flutter_blue_plus.dart';
    
    // 开始扫描
    FlutterBluePlus.startScan(
      timeout: Duration(seconds: 15), // 可选:设置扫描超时
    );
    
    // 监听扫描结果
    StreamSubscription<List<ScanResult>> subscription = FlutterBluePlus.scanResults.listen((results) {
      for (ScanResult result in results) {
        print('发现设备: ${result.device.name} | RSSI: ${result.rssi}');
      }
    });
    
    // 停止扫描(在需要时调用)
    // FlutterBluePlus.stopScan();
    
  4. 检查蓝牙状态
    在扫描前建议检查蓝牙是否开启:

    if (await FlutterBluePlus.isAvailable == false) {
      print("设备不支持蓝牙");
      return;
    }
    if (await FlutterBluePlus.isOn == false) {
      // 提示用户开启蓝牙
      return;
    }
    
  5. 处理权限(Android 12+)
    动态请求权限:

    // 使用permission_handler包请求权限
    await Permission.bluetoothScan.request();
    await Permission.bluetoothConnect.request();
    

注意事项:

  • 扫描结果通过Stream返回,需妥善管理StreamSubscription
  • 在页面销毁时停止扫描并取消订阅,避免内存泄漏。
  • 实际设备名称可能为null,建议通过device.remoteId识别设备。

完成扫描后,可通过result.device.connect()连接目标设备。

回到顶部