Flutter蓝牙通信插件simple_flutter_ble的使用
Flutter蓝牙通信插件simple_flutter_ble的使用
Flutter 插件 simple_flutter_ble
是一个用于低功耗蓝牙(Bluetooth Low Energy, BLE)通信的工具。它支持设备发现、连接管理、数据读写及通知等功能。
特性
- 可以基于指定的服务 UUID 列表来发现设备。
- 监听蓝牙连接状态的变化。
- 支持发送数据并等待响应。
- 监听设备连接状态的变化。
- 支持订阅通知。
开始使用
引入插件
在项目的 pubspec.yaml
文件中添加依赖:
dependencies:
simple_flutter_ble: ^版本号
然后运行以下命令安装依赖:
flutter pub get
初始化插件
import 'package:simple_flutter_ble/simple_flutter_ble.dart';
// 初始化插件
FlutterBle flutterBle = FlutterBle();
// 或者通过服务 UUID 过滤设备
// FlutterBle flutterBle = FlutterBle(['ec75916b-2217-401d-a433-80411522b493']);
启动设备发现
// 开始扫描设备
flutterBle.start();
// 监听发现的设备
flutterBle.discoveredDevices.listen((List<BLEDevice> devices) {
// 设备列表发生变化时触发
});
// 监听蓝牙连接状态
flutterBle.startBluetoothListener();
flutterBle.onBluetoothConnection.listen((bool status) {
// 蓝牙连接状态变化时触发
});
数据读写与通知
// 写入数据
device.write('uuid', '<动态数据>');
// 等待响应
var data = device.writeWithResponse('uuid', '<动态数据>');
// 读取数据
var data = device.read('uuid');
// 订阅通知
device.notify('uuid').listen((data) {
// 接收到通知时触发
});
使用 Implements 实现回调
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> implements DeviceListener {
final flutterBle = FlutterBle();
[@override](/user/override)
void initState() {
super.initState();
startListening();
}
void startListening() {
flutterBle.start();
flutterBle.discoveredDevices.listen((List<BLEDevice> devices) {
// 设备列表变化时触发
});
flutterBle.startBluetoothListener();
flutterBle.onBluetoothConnection.listen((bool status) {
// 蓝牙连接状态变化时触发
});
flutterBle.setListener(this);
}
[@override](/user/override)
void onBluetoothConnected(bool status) {
// 蓝牙连接状态变化回调
}
[@override](/user/override)
void onBluetoothDisconnected(bool status) {
// 蓝牙断开连接回调
}
[@override](/user/override)
void onDeviceConnected(String address, bool status) {
// 设备连接状态变化回调
}
[@override](/user/override)
void onDeviceDisconnected(String address, bool status) {
// 设备断开连接回调
}
[@override](/user/override)
void onDiscoveredDevices(List<BLEDevice> devices) {
// 发现设备回调
}
[@override](/user/override)
void onNotify(data) {
// 接收到通知回调
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('BLE Plugin Example')),
body: Center(
child: ListView.builder(
itemCount: devices.length,
itemBuilder: (context, index) {
BLEDevice device = devices[index];
return Column(
children: [
Row(
children: [
Text(device.name ?? ''),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: (device.online ?? false) ? Colors.green : Colors.redAccent,
),
width: 10,
height: 10,
),
const SizedBox(width: 20),
TextButton(
onPressed: () {
device.connect();
device.status.listen((status) {
// 设备状态变化回调
});
},
child: const Text('Connect'),
),
device.online!
? TextButton(
onPressed: () {
device.write('uuid', '<动态数据>');
var data = device.writeWithResponse('uuid', '<动态数据>');
},
child: const Text('Send Data'),
)
: const SizedBox(),
],
),
],
);
},
),
),
),
);
}
}
完整示例
以下是完整的示例代码,展示如何使用 simple_flutter_ble
插件实现蓝牙通信功能。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:simple_flutter_ble/simple_flutter_ble.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> implements DeviceListener {
final flutterBle = FlutterBle();
List<BLEDevice> devices = [];
[@override](/user/override)
void initState() {
super.initState();
startListening();
}
void startListening() {
flutterBle.start();
flutterBle.discoveredDevices.listen((List<BLEDevice> devices) {
setState(() {
this.devices = devices;
});
});
flutterBle.startBluetoothListener();
flutterBle.onBluetoothConnection.listen((bool status) {
// 蓝牙连接状态变化
});
flutterBle.setListener(this);
}
[@override](/user/override)
void onBluetoothConnected(bool status) {
// 蓝牙连接状态变化回调
}
[@override](/user/override)
void onBluetoothDisconnected(bool status) {
// 蓝牙断开连接回调
}
[@override](/user/override)
void onDeviceConnected(String address, bool status) {
// 设备连接状态变化回调
}
[@override](/user/override)
void onDeviceDisconnected(String address, bool status) {
// 设备断开连接回调
}
[@override](/user/override)
void onDiscoveredDevices(List<BLEDevice> devices) {
// 发现设备回调
}
[@override](/user/override)
void onNotify(data) {
// 接收到通知回调
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('BLE Plugin Example')),
body: Center(
child: ListView.builder(
itemCount: devices.length,
itemBuilder: (context, index) {
BLEDevice device = devices[index];
return Column(
children: [
Row(
children: [
Text(device.name ?? ''),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: (device.online ?? false) ? Colors.green : Colors.redAccent,
),
width: 10,
height: 10,
),
const SizedBox(width: 20),
TextButton(
onPressed: () {
device.connect();
device.status.listen((status) {
// 设备状态变化回调
});
},
child: const Text('Connect'),
),
device.online!
? TextButton(
onPressed: () {
device.write('uuid', '<动态数据>');
var data = device.writeWithResponse('uuid', '<动态数据>');
},
child: const Text('Send Data'),
)
: const SizedBox(),
],
),
],
);
},
),
),
),
);
}
}
更多关于Flutter蓝牙通信插件simple_flutter_ble的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter蓝牙通信插件simple_flutter_ble的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
simple_flutter_ble
是一个用于在 Flutter 应用中实现蓝牙低功耗(BLE)通信的插件。它简化了与 BLE 设备的交互过程,使得开发者可以更轻松地实现蓝牙通信功能。以下是如何使用 simple_flutter_ble
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 simple_flutter_ble
插件的依赖:
dependencies:
flutter:
sdk: flutter
simple_flutter_ble: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 文件中导入插件并初始化它:
import 'package:simple_flutter_ble/simple_flutter_ble.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: BleExample(),
);
}
}
class BleExample extends StatefulWidget {
[@override](/user/override)
_BleExampleState createState() => _BleExampleState();
}
class _BleExampleState extends State<BleExample> {
SimpleFlutterBle _ble = SimpleFlutterBle();
[@override](/user/override)
void initState() {
super.initState();
_initializeBle();
}
void _initializeBle() async {
await _ble.initialize();
// 检查蓝牙是否启用
bool isEnabled = await _ble.isBluetoothEnabled();
if (!isEnabled) {
// 请求用户启用蓝牙
await _ble.requestBluetoothEnable();
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BLE Example'),
),
body: Center(
child: Text('BLE Example'),
),
);
}
}
3. 扫描设备
你可以使用 startScan
方法来扫描附近的 BLE 设备:
void _startScan() async {
_ble.startScan(
onDeviceFound: (device) {
print('Found device: ${device.name}, ${device.id}');
},
);
}
4. 连接设备
扫描到设备后,你可以使用 connect
方法来连接设备:
void _connectToDevice(String deviceId) async {
await _ble.connect(deviceId);
print('Connected to device: $deviceId');
}
5. 读取和写入特征值
连接成功后,你可以读取或写入设备的特征值:
void _readCharacteristic(String serviceUuid, String characteristicUuid) async {
List<int> value = await _ble.readCharacteristic(serviceUuid, characteristicUuid);
print('Read value: $value');
}
void _writeCharacteristic(String serviceUuid, String characteristicUuid, List<int> value) async {
await _ble.writeCharacteristic(serviceUuid, characteristicUuid, value);
print('Write value: $value');
}
6. 断开连接
当你不再需要与设备通信时,可以断开连接:
void _disconnectDevice(String deviceId) async {
await _ble.disconnect(deviceId);
print('Disconnected from device: $deviceId');
}
7. 处理权限
在 Android 上,你可能需要处理蓝牙和位置权限。确保在 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"/>
并在运行时请求这些权限:
import 'package:permission_handler/permission_handler.dart';
void _requestPermissions() async {
await Permission.location.request();
await Permission.bluetooth.request();
await Permission.bluetoothConnect.request();
await Permission.bluetoothScan.request();
}
8. 处理错误
在使用 BLE 时,可能会遇到各种错误,例如设备未找到、连接失败等。确保在代码中处理这些错误:
try {
await _ble.connect(deviceId);
} catch (e) {
print('Failed to connect: $e');
}
9. 清理资源
在应用退出时,确保释放 BLE 资源:
[@override](/user/override)
void dispose() {
_ble.dispose();
super.dispose();
}