Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用
Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用
特性
- 使用OTS协议简化与蓝牙设备的复杂交互。
- 可以与多种BLE包(如
flutter_reactive_ble
或flutter_blue_plus
)配合使用。 - 提供了简便的方法来读取、写入和执行设备ID上的操作。
- 在底层处理元数据检索和通信细节。
使用方法
-
导入该包:
import 'package:flutter_ble_ots/flutter_ble_ots.dart';
-
实现
BleDeviceInteractor
接口。例如,使用flutter_reactive_ble
。查看示例文件夹中的示例实现。import 'package:flutter_ble_ots/flutter_ble_ots.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; class BleDeviceInteractorImpl extends BleDeviceInteractor { final FlutterReactiveBle _ble; BleDeviceInteractorImpl(this._ble); QualifiedCharacteristic _getReactiveCharacteristicFromCommon(CommonCharacteristic char) => QualifiedCharacteristic( characteristicId: Uuid(char.characteristicId), serviceId: Uuid(char.serviceId), deviceId: char.deviceId, ); ConnectionPriority _getReactivePriorityFromCommon(CommonConnectionPriority prio) { switch (prio) { case CommonConnectionPriority.balanced: return ConnectionPriority.balanced; case CommonConnectionPriority.highPerformance: return ConnectionPriority.highPerformance; case CommonConnectionPriority.lowPower: return ConnectionPriority.lowPower; } } @override Future<List<int>> readCharacteristic(CommonCharacteristic characteristic) => _ble.readCharacteristic(_getReactiveCharacteristicFromCommon(characteristic)); @override Future<void> requestConnectionPriority(CommonConnectionPriority priority, String deviceId) => _ble.requestConnectionPriority(deviceId: deviceId, priority: _getReactivePriorityFromCommon(priority)); @override Future<int> requestMtu(int mtu, String deviceId) => _ble.requestMtu(deviceId: deviceId, mtu: mtu); @override Stream<List<int>> subscribeToCharacteristic(CommonCharacteristic characteristic) => _ble.subscribeToCharacteristic(_getReactiveCharacteristicFromCommon(characteristic)); @override Future<void> writeCharacteristicWithResponse(CommonCharacteristic characteristic, List<int> value) => _ble.writeCharacteristicWithResponse(_getReactiveCharacteristicFromCommon(characteristic), value: value); @override Future<void> writeCharacteristicWithoutResponse(CommonCharacteristic characteristic, List<int> value) => _ble.writeCharacteristicWithoutResponse(_getReactiveCharacteristicFromCommon(characteristic), value: value); }
-
创建一个
BleOtsWrapper
实例:final bleWrapper = BleOtsWrapper( deviceId, bleDeviceInteractor, logMessageCallback, metaDataUuids, getNameFromUuidCallback, );
-
初始化包装器,调用
init()
方法:await bleWrapper.init();
-
开始使用包提供的简化方法:
final supportedUuids = await bleWrapper.getListOfSupportedUuids(); final data = await bleWrapper.readDataFromId(id); final success = await bleWrapper.writeDataToId(id, value); final result = await bleWrapper.executeId(id);
元数据UUIDs
为了使用OTS协议与蓝牙设备通信,你需要提供设备的元数据UUIDs。这些UUIDs应由蓝牙设备制造商定义,并可以作为MetaDataUuids
实例提供:
MetaDataUuids(
featureDiscoveryUuid: Uuid.parse('2abd').data,
oacpUuid: Uuid.parse('2ac5').data,
objectIdUuid: Uuid.parse('2ac3').data,
objectNameUuid: Uuid.parse('2abe').data,
objectPropertiesUuid: Uuid.parse('2ac4').data,
objectSizeUuid: Uuid.parse('2ac0').data,
olcpUuid: Uuid.parse('2ac6').data,
otsUuid: Uuid.parse('1825').data,
transmissionUuid: Uuid.parse('3bc9').data,
)
更多关于Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_ble_ots
是一个 Flutter 插件,用于与支持蓝牙低功耗(BLE)的对象传输服务(OTS - Object Transfer Service)的设备进行通信。OTS 是一种 BLE 服务,用于在设备之间传输文件或其他数据对象。
以下是如何使用 flutter_ble_ots
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 flutter_ble_ots
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_ble_ots: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 配置权限
在使用蓝牙时,需要在 AndroidManifest.xml
和 Info.plist
中添加必要的权限。
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
中添加以下权限:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to connect to devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<td><string>We need access to Bluetooth to connect to devices.</td>
3. 初始化插件
在你的 Dart 代码中,导入并初始化 flutter_ble_ots
插件。
import 'package:flutter_ble_ots/flutter_ble_ots.dart';
final bleOts = FlutterBleOts();
4. 扫描设备
使用 flutter_ble_ots
插件扫描附近的 BLE 设备。
void scanDevices() async {
bleOts.startScan();
bleOts.scanResults.listen((results) {
for (var result in results) {
print('Found device: ${result.device.name} - ${result.device.id}');
}
});
}
5. 连接设备
选择你要连接的设备,并建立连接。
void connectToDevice(String deviceId) async {
await bleOts.connect(deviceId);
print('Connected to device: $deviceId');
}
6. 发现服务
连接成功后,发现设备支持的服务。
void discoverServices(String deviceId) async {
var services = await bleOts.discoverServices(deviceId);
for (var service in services) {
print('Service found: ${service.uuid}');
}
}
7. 传输数据
通过 OTS 服务传输数据对象。
void transferObject(String deviceId, List<int> objectData) async {
await bleOts.writeObject(deviceId, objectData);
print('Object transferred successfully');
}
8. 断开连接
完成任务后,断开与设备的连接。
void disconnectDevice(String deviceId) async {
await bleOts.disconnect(deviceId);
print('Disconnected from device: $deviceId');
}
9. 处理错误
在使用过程中,可能会遇到各种错误,建议使用 try-catch
块来捕获和处理异常。
try {
await bleOts.connect(deviceId);
} catch (e) {
print('Error connecting to device: $e');
}
10. 清理资源
在应用关闭或不再需要蓝牙连接时,记得停止扫描和断开所有连接。
[@override](/user/override)
void dispose() {
bleOts.stopScan();
bleOts.disconnectAll();
super.dispose();
}