Flutter Blue Plus 是一个强大的 Flutter 蓝牙插件,支持 BLE(低功耗蓝牙)设备通信。以下是完整使用流程:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_blue_plus: ^1.0.0
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"/>
iOS (ios/Runner/Info.plist):
<dict>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要蓝牙权限</string>
</dict>
3. 核心使用代码
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BluetoothController {
// 扫描设备
void startScan() {
FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
FlutterBluePlus.scanResults.listen((results) {
for (ScanResult r in results) {
print('发现设备: ${r.device.name} - ${r.device.id}');
}
});
}
// 停止扫描
void stopScan() {
FlutterBluePlus.stopScan();
}
// 连接设备
Future<void> connectDevice(BluetoothDevice device) async {
await device.connect();
print("已连接: ${device.name}");
// 发现服务
List<BluetoothService> services = await device.discoverServices();
for (var service in services) {
print("服务: ${service.uuid}");
// 读取特征值
for (var characteristic in service.characteristics) {
print("特征: ${characteristic.uuid}");
List<int> value = await characteristic.read();
print("特征值: $value");
}
}
}
// 写入数据
Future<void> writeData(BluetoothCharacteristic characteristic) async {
await characteristic.write([0x01, 0x02]);
}
// 监听数据
void listenToData(BluetoothCharacteristic characteristic) {
characteristic.onValueReceived.listen((value) {
print("收到数据: $value");
});
}
// 断开连接
void disconnect(BluetoothDevice device) {
device.disconnect();
}
}
4. 权限处理(Android 12+)
// 检查并请求权限
Future<bool> checkPermissions() async {
if (Platform.isAndroid) {
return await FlutterBluePlus.isSupported;
}
return true;
}
5. 状态监听
// 蓝牙状态
FlutterBluePlus.adapterState.listen((state) {
if (state == BluetoothAdapterState.on) {
print("蓝牙已开启");
}
});
// 设备连接状态
device.connectionState.listen((state) {
if (state == BluetoothConnectionState.connected) {
print("设备已连接");
}
});
注意事项:
- 真机测试需要开启设备蓝牙
- iOS 需要物理设备测试
- 部分功能需要特定 UUID
- 及时释放监听器和断开连接
建议查看官方文档获取最新 API 和完整示例:https://pub.dev/packages/flutter_blue_plus