在Flutter中实现BLE功能,主要通过第三方插件实现。以下是具体实现步骤和代码示例:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_blue_plus: ^1.8.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 BLEManager {
FlutterBluePlus flutterBlue = FlutterBluePlus.instance;
// 扫描设备
void startScan() {
flutterBlue.startScan(timeout: Duration(seconds: 10));
// 监听扫描结果
flutterBlue.scanResults.listen((results) {
for (ScanResult result in results) {
print('发现设备: ${result.device.name} - ${result.device.id}');
// 过滤设备逻辑
if (result.device.name.contains("YourDeviceName")) {
connectToDevice(result.device);
}
}
});
}
// 连接设备
Future<void> connectToDevice(BluetoothDevice device) async {
await device.connect();
print('已连接到: ${device.name}');
// 发现服务
List<BluetoothService> services = await device.discoverServices();
for (BluetoothService service in services) {
print('服务UUID: ${service.uuid}');
// 处理特征值
for (BluetoothCharacteristic characteristic in service.characteristics) {
print('特征值UUID: ${characteristic.uuid}');
// 读取特征值
List<int> value = await characteristic.read();
print('特征值数据: $value');
}
}
}
// 停止扫描
void stopScan() {
flutterBlue.stopScan();
}
// 断开连接
void disconnect(BluetoothDevice device) {
device.disconnect();
}
}
4. 使用示例
class BLEPage extends StatefulWidget {
@override
_BLEPageState createState() => _BLEPageState();
}
class _BLEPageState extends State<BLEPage> {
final BLEManager bleManager = BLEManager();
@override
void initState() {
super.initState();
bleManager.startScan();
}
@override
void dispose() {
bleManager.stopScan();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('BLE功能')),
body: Center(
child: Text('BLE功能运行中...'),
),
);
}
}
主要功能说明:
- 设备扫描:自动扫描周围的BLE设备
- 设备连接:连接到指定设备
- 服务发现:获取设备的服务和特征值
- 数据读写:读取和写入特征值数据
注意:实际使用时需要根据具体设备的UUID进行相应配置,并处理权限请求和连接状态管理。