Flutter如何使用flutter_blue_plus插件实现蓝牙功能

在Flutter项目中集成flutter_blue_plus插件时,如何实现基本的蓝牙功能?比如扫描附近的蓝牙设备、连接设备、读写特征值等。能否提供一个简单的代码示例说明具体实现步骤?需要注意哪些常见问题,例如权限配置或Android/iOS平台差异?

2 回复

使用flutter_blue_plus实现蓝牙功能步骤:

  1. 添加依赖到pubspec.yaml
  2. 配置平台权限(Android/iOS)
  3. 初始化蓝牙适配器
  4. 扫描设备、连接设备
  5. 发现服务和特征值
  6. 读写数据

关键类:BluetoothAdapter、BluetoothDevice、BluetoothService、BluetoothCharacteristic

更多关于Flutter如何使用flutter_blue_plus插件实现蓝牙功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用flutter_blue_plus插件实现蓝牙功能,主要包括扫描设备、连接、读写特征值等步骤。以下是核心实现方法:

1. 添加依赖和权限配置

pubspec.yaml

dependencies:
  flutter_blue_plus: ^1.10.0

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>

2. 核心功能实现

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.localName} - ${r.device.remoteId}');
      }
    });
  }

  // 停止扫描
  void stopScan() {
    FlutterBluePlus.stopScan();
  }

  // 连接设备
  Future<void> connect(BluetoothDevice device) async {
    await device.connect();
    print("已连接至: ${device.localName}");
    
    // 发现服务
    List<BluetoothService> services = await device.discoverServices();
    for (var service in services) {
      for (var characteristic in service.characteristics) {
        // 读取特征值示例
        if (characteristic.properties.read) {
          List<int> value = await characteristic.read();
          print('特征值: $value');
        }
        
        // 写入特征值示例
        if (characteristic.properties.write) {
          await characteristic.write([0x12, 0x34]);
        }
        
        // 订阅通知示例
        if (characteristic.properties.notify) {
          characteristic.value.listen((value) {
            print('收到通知: $value');
          });
          await characteristic.setNotifyValue(true);
        }
      }
    }
  }

  // 断开连接
  void disconnect(BluetoothDevice device) {
    device.disconnect();
  }
}

3. 权限处理(Android 12+)

// 检查并请求权限
Future<bool> checkPermissions() async {
  if (Platform.isAndroid) {
    return await FlutterBluePlus.isSupported && await FlutterBluePlus.requestEnable();
  }
  return true;
}

使用注意事项:

  1. 真机测试:蓝牙功能需在真机上测试
  2. 设备配对:部分设备需要先系统配对才能连接
  3. 服务发现:连接后必须调用discoverServices()才能获取服务
  4. 特征值操作:需根据实际蓝牙设备的特征值属性进行操作

建议参考官方文档:https://pub.dev/packages/flutter_blue_plus 获取更详细说明和示例代码。

回到顶部