Flutter如何使用flutter_blue_plus插件实现蓝牙功能
我在使用Flutter开发一个需要蓝牙功能的APP,尝试了flutter_blue_plus插件但遇到一些问题:
- 如何正确初始化并扫描附近的蓝牙设备?
- 连接设备时总是失败,有哪些常见的连接错误需要排查?
- 读取和写入蓝牙特征值时需要注意什么?
- 如何监听设备断开连接或信号强度变化?
- 这个插件在iOS和Android上的兼容性如何?有没有特别需要注意的平台差异?
希望能得到具体的代码示例和最佳实践建议。
2 回复
使用flutter_blue_plus实现蓝牙功能步骤:
- 添加依赖:
flutter_blue_plus: ^1.0.0 - 配置权限:Android需蓝牙和定位权限,iOS需NSBluetoothAlwaysUsageDescription
- 基本使用:
- 扫描设备:
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参数过滤特定服务设备。
通过以上步骤,可完成蓝牙设备的扫描、连接、数据读写等核心功能。

