Flutter蓝牙控制插件ble_controller的使用

Flutter蓝牙控制插件ble_controller的使用

本指南将详细介绍如何在Flutter项目中使用ble_controller插件来实现蓝牙设备的控制。首先,确保你已经设置好了Flutter开发环境,并且可以创建一个新的Flutter项目。

开始使用

ble_controller是一个用于Flutter应用的蓝牙库。你可以通过查阅官方文档获得更多帮助,包括教程、示例代码以及详细的API参考。

示例代码

以下是一个简单的示例,展示了如何使用ble_controller插件来初始化一个Flutter应用并进行基本的蓝牙操作。

示例代码:main.dart

import 'package:ble_controller/model/ble_device.dart';
import 'package:ble_controller_example/bind.dart'; // 引入绑定类
import 'package:ble_controller_example/controller.dart'; // 引入控制器类
import 'package:ble_controller_example/route_info.dart'; // 引入路由信息类
import 'package:flutter/material.dart';
import 'package:ble_controller/hc_ble.dart'; // 引入蓝牙核心库
import 'package:get/get.dart'; // 引入GetX框架
import 'package:logger/logger.dart'; // 引入日志记录器

void main() {
  runApp(
    GetMaterialApp( // 使用GetX框架构建MaterialApp
      debugShowCheckedModeBanner: false, // 禁用调试标志
      initialBinding: InitBind(), // 初始化绑定类
      getPages: RouteInfo.pages, // 设置页面路由
      initialRoute: RouteInfo.routeRoot, // 设置初始路由
    ),
  );
}

详细步骤

  1. 添加依赖pubspec.yaml文件中添加ble_controller依赖:

    dependencies:
      flutter:
        sdk: flutter
      ble_controller: ^1.0.0 # 请替换为最新版本号
      get: ^4.6.1 # 请替换为最新版本号
      logger: ^1.0.0 # 请替换为最新版本号
    
  2. 初始化应用 如上所示,在main.dart文件中使用GetMaterialApp初始化应用,并配置必要的绑定类、路由信息等。

  3. 创建蓝牙设备列表 创建一个方法来扫描附近的蓝牙设备,并将其显示在界面上。

    List<BleDevice> devices = [];
    
    void scanDevices() async {
      var hcBle = HCBle(); // 创建HCBle实例
      await hcBle.startScan(); // 启动扫描
      hcBle.onDeviceDiscovered.listen((device) { // 监听设备发现事件
        setState(() {
          devices.add(device); // 将新发现的设备添加到列表中
        });
      });
    }
    
  4. 连接设备 创建一个方法来连接到选定的蓝牙设备。

    Future<void> connectToDevice(BleDevice device) async {
      var hcBle = HCBle();
      await hcBle.connect(device.id); // 连接到指定ID的设备
      Logger().i('Connected to ${device.name}'); // 记录连接成功信息
    }
    
  5. 断开连接 创建一个方法来断开与当前设备的连接。

    Future<void> disconnectDevice() async {
      var hcBle = HCBle();
      await hcBle.disconnect(); // 断开连接
      Logger().i('Disconnected from current device'); // 记录断开连接信息
    }
    

更多关于Flutter蓝牙控制插件ble_controller的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙控制插件ble_controller的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ble_controller 是一个用于在 Flutter 应用中控制蓝牙设备的插件。它提供了与蓝牙设备进行通信的功能,包括扫描、连接、发送和接收数据等。以下是如何使用 ble_controller 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 ble_controller 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  ble_controller: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 以获取依赖。

2. 导入插件

在你的 Dart 文件中导入 ble_controller 插件:

import 'package:ble_controller/ble_controller.dart';

3. 初始化蓝牙控制器

在使用蓝牙功能之前,需要初始化 BleController

BleController bleController = BleController();

4. 检查蓝牙状态

在开始扫描或连接设备之前,检查设备的蓝牙状态:

bool isBluetoothEnabled = await bleController.isBluetoothEnabled();
if (!isBluetoothEnabled) {
  // 请求用户打开蓝牙
  await bleController.enableBluetooth();
}

5. 扫描设备

使用 scanForDevices 方法扫描附近的蓝牙设备:

List<BluetoothDevice> devices = await bleController.scanForDevices();

BluetoothDevice 通常包含设备的名称、地址等信息。

6. 连接设备

选择要连接的设备后,使用 connectToDevice 方法进行连接:

await bleController.connectToDevice(deviceAddress);

deviceAddress 是设备的 MAC 地址。

7. 发送和接收数据

连接成功后,可以使用 writeCharacteristicreadCharacteristic 方法发送和接收数据:

// 发送数据
await bleController.writeCharacteristic(serviceUuid, characteristicUuid, data);

// 接收数据
List<int> receivedData = await bleController.readCharacteristic(serviceUuid, characteristicUuid);

serviceUuidcharacteristicUuid 是蓝牙服务的 UUID 和特征的 UUID,data 是要发送的数据。

8. 断开连接

在完成操作后,断开与设备的连接:

await bleController.disconnectFromDevice();

9. 处理异常

在使用蓝牙功能时,可能会遇到各种异常情况,建议使用 try-catch 块来处理异常:

try {
  await bleController.connectToDevice(deviceAddress);
} catch (e) {
  print('连接失败: $e');
}

10. 权限处理

在 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 {
  if (await Permission.location.isDenied) {
    await Permission.location.request();
  }
}

示例代码

以下是一个简单的示例,展示了如何使用 ble_controller 插件扫描和连接蓝牙设备:

import 'package:flutter/material.dart';
import 'package:ble_controller/ble_controller.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BluetoothScreen(),
    );
  }
}

class BluetoothScreen extends StatefulWidget {
  [@override](/user/override)
  _BluetoothScreenState createState() => _BluetoothScreenState();
}

class _BluetoothScreenState extends State<BluetoothScreen> {
  BleController bleController = BleController();
  List<BluetoothDevice> devices = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    initBluetooth();
  }

  Future<void> initBluetooth() async {
    bool isBluetoothEnabled = await bleController.isBluetoothEnabled();
    if (!isBluetoothEnabled) {
      await bleController.enableBluetooth();
    }
    await scanDevices();
  }

  Future<void> scanDevices() async {
    List<BluetoothDevice> scannedDevices = await bleController.scanForDevices();
    setState(() {
      devices = scannedDevices;
    });
  }

  Future<void> connectToDevice(String deviceAddress) async {
    try {
      await bleController.connectToDevice(deviceAddress);
      print('连接成功');
    } catch (e) {
      print('连接失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('蓝牙控制示例'),
      ),
      body: ListView.builder(
        itemCount: devices.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(devices[index].name),
            subtitle: Text(devices[index].address),
            onTap: () => connectToDevice(devices[index].address),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: scanDevices,
        child: Icon(Icons.search),
      ),
    );
  }
}
回到顶部