Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用

Flutter蓝牙LE OTS管理插件flutter_ble_ots的使用

特性

  • 使用OTS协议简化与蓝牙设备的复杂交互。
  • 可以与多种BLE包(如flutter_reactive_bleflutter_blue_plus)配合使用。
  • 提供了简便的方法来读取、写入和执行设备ID上的操作。
  • 在底层处理元数据检索和通信细节。

使用方法

  1. 导入该包:

    import 'package:flutter_ble_ots/flutter_ble_ots.dart';
    
  2. 实现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);
    }
    
  3. 创建一个BleOtsWrapper实例:

    final bleWrapper = BleOtsWrapper(
      deviceId,
      bleDeviceInteractor,
      logMessageCallback,
      metaDataUuids,
      getNameFromUuidCallback,
    );
    
  4. 初始化包装器,调用init()方法:

    await bleWrapper.init();
    
  5. 开始使用包提供的简化方法:

    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

1 回复

更多关于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.xmlInfo.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();
}
回到顶部