Flutter如何使用flutter_blue_plus扫描蓝牙
在Flutter项目中集成flutter_blue_plus库后,如何正确实现蓝牙设备扫描功能?我按照官方文档初始化了插件并申请了权限,但调用startScan()后无法获取到周边设备。是否需要额外配置广播参数或扫描过滤器?请分享一个完整的设备扫描代码示例,包括权限处理、扫描启动/停止以及设备列表更新的实现逻辑。
2 回复
使用flutter_blue_plus扫描蓝牙步骤:
- 添加依赖到pubspec.yaml
- 请求蓝牙权限
- 初始化FlutterBluePlus
- 调用startScan()开始扫描
- 监听scanResults获取设备列表
- 使用stopScan()停止扫描
记得处理权限和错误处理。
更多关于Flutter如何使用flutter_blue_plus扫描蓝牙的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用flutter_blue_plus扫描蓝牙设备,步骤如下:
-
添加依赖
在pubspec.yaml中:dependencies: flutter_blue_plus: ^1.30.0 -
配置权限
- 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>
- Android:在
-
扫描蓝牙设备
使用以下代码开始扫描: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(); -
检查蓝牙状态
在扫描前建议检查蓝牙是否开启:if (await FlutterBluePlus.isAvailable == false) { print("设备不支持蓝牙"); return; } if (await FlutterBluePlus.isOn == false) { // 提示用户开启蓝牙 return; } -
处理权限(Android 12+)
动态请求权限:// 使用permission_handler包请求权限 await Permission.bluetoothScan.request(); await Permission.bluetoothConnect.request();
注意事项:
- 扫描结果通过
Stream返回,需妥善管理StreamSubscription。 - 在页面销毁时停止扫描并取消订阅,避免内存泄漏。
- 实际设备名称可能为
null,建议通过device.remoteId识别设备。
完成扫描后,可通过result.device.connect()连接目标设备。

