Flutter蓝牙通信插件secugen_ble_plugin的使用

Flutter蓝牙通信插件secugen_ble_plugin的使用

获取开始

本项目是一个用于 Flutter 的插件包起点。这是一个专门包含 Android 和/或 iOS 平台特定实现代码的包。

对于如何开始 Flutter 开发的帮助,可以查看官方文档,该文档提供了教程、示例、移动开发指南以及完整的 API 参考。

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

import 'package:flutter/services.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:secugen_ble_plugin/secugen_ble_plugin.dart';
import 'package:secugen_ble_plugin_example/ble/ble_device_connector.dart';
import 'package:secugen_ble_plugin_example/ble/ble_device_interactor.dart';
import 'package:secugen_ble_plugin_example/ble/ble_logger.dart';
import 'package:secugen_ble_plugin_example/ble/ble_scanner.dart';
import 'package:secugen_ble_plugin_example/ble/ble_status_monitor.dart';
import 'package:secugen_ble_plugin_example/ble_status_screen.dart';
import 'package:secugen_ble_plugin_example/device_list.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  final _ble = FlutterReactiveBle();
  final _bleLogger = BleLogger(ble: _ble);
  final _scanner = BleScanner(ble: _ble, logMessage: _bleLogger.addToLog);
  final _monitor = BleStatusMonitor(_ble);
  final _connector = BleDeviceConnector(
    ble: _ble,
    logMessage: _bleLogger.addToLog,
  );
  final _serviceDiscoverer = BleDeviceInteractor(
    bleDiscoverServices: (deviceId) async {
      await _ble.discoverAllServices(deviceId);
      return _ble.getDiscoveredServices(deviceId);
    },
    logMessage: _bleLogger.addToLog,
    readRssi: _ble.readRssi,
  );
  runApp(MultiProvider(providers: [
    Provider.value(value: _scanner),
    Provider.value(value: _monitor),
    Provider.value(value: _connector),
    Provider.value(value: _serviceDiscoverer),
    Provider.value(value: _bleLogger),
    StreamProvider<BleScannerState?>(
      create: (_) => _scanner.state,
      initialData: const BleScannerState(
        discoveredDevices: [],
        scanIsInProgress: false,
      ),
    ),
    StreamProvider<BleStatus?>(
      create: (_) => _monitor.state,
      initialData: BleStatus.unknown,
    ),
    StreamProvider<ConnectionStateUpdate>(
      create: (_) => _connector.state,
      initialData: const ConnectionStateUpdate(
        deviceId: 'Unknown device',
        connectionState: DeviceConnectionState.disconnected,
        failure: null,
      ),
    ),
  ], child: MyApp()));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _secugenBlePlugin = SecugenBlePlugin();

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

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

  /*Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion =
          await _secugenBlePlugin.getVersion() ?? 'Unknown version';

      var testmakeRecordStart = await _secugenBlePlugin.makeRecordStart(6);
      var testmakeRecordCont = await _secugenBlePlugin.makeRecordCont(8);
      var testloadMatchtemplate =
          await _secugenBlePlugin.loadMatchTemplateWithExtraData(
              extraDataSize: 1, extraData: Uint8List(20));
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }*/
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      color: Colors.lightBlue,
      home: MainPage(),
    );
  }

  /* [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }*/
}

Future<void> requestBluetoothPermissions() async {
  if (await Permission.bluetoothScan.request().isGranted &&
      await Permission.bluetoothConnect.request().isGranted &&
      await Permission.locationWhenInUse.request().isGranted) {
    // 权限已授予,可以继续
    print("权限已授予");
  } else {
    // 权限被拒绝
    print("权限被拒绝");
  }
}

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

class _MainPageState extends State<MainPage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    requestBluetoothPermissions();
  }

  [@override](/user/override)
  Widget build(BuildContext context) => Consumer<BleStatus?>(
        builder: (_, status, __) {
          if (status == BleStatus.ready) {
            return const DeviceListScreen();
          } else {
            return BleStatusScreen(status: status ?? BleStatus.unknown);
          }
        },
      );
}

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

1 回复

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


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

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 secugen_ble_plugin 的依赖:

dependencies:
  flutter:
    sdk: flutter
  secugen_ble_plugin: ^0.0.1  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 初始化插件

在你的 Dart 代码中,导入并初始化 secugen_ble_plugin

import 'package:secugen_ble_plugin/secugen_ble_plugin.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SecugenBlePlugin blePlugin = SecugenBlePlugin();
  runApp(MyApp(blePlugin: blePlugin));
}

3. 扫描蓝牙设备

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

void scanDevices() async {
  List<BluetoothDevice> devices = await blePlugin.scanDevices();
  devices.forEach((device) {
    print('Device: ${device.name}, Address: ${device.address}');
  });
}

4. 连接蓝牙设备

使用 connect 方法来连接选定的蓝牙设备:

void connectToDevice(String deviceAddress) async {
  bool isConnected = await blePlugin.connect(deviceAddress);
  if (isConnected) {
    print('Connected to device');
  } else {
    print('Failed to connect to device');
  }
}

5. 发送数据

使用 sendData 方法向已连接的设备发送数据:

void sendDataToDevice(String data) async {
  bool isSent = await blePlugin.sendData(data);
  if (isSent) {
    print('Data sent successfully');
  } else {
    print('Failed to send data');
  }
}

6. 接收数据

使用 setOnDataReceivedListener 来监听从设备接收到的数据:

void setupDataListener() {
  blePlugin.setOnDataReceivedListener((String data) {
    print('Received data: $data');
  });
}

7. 断开连接

使用 disconnect 方法来断开与设备的连接:

void disconnectDevice() async {
  bool isDisconnected = await blePlugin.disconnect();
  if (isDisconnected) {
    print('Disconnected from device');
  } else {
    print('Failed to disconnect');
  }
}

8. 处理权限和蓝牙状态

在 Android 和 iOS 上,蓝牙功能可能需要特定的权限。确保在 AndroidManifest.xmlInfo.plist 中配置了必要的权限。

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"/>

iOS

Info.plist 中添加以下键值对:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to connect to devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>We need access to Bluetooth to connect to devices.</string>

9. 处理蓝牙开关状态

你可以在应用程序中检查蓝牙是否已启用,并提示用户打开蓝牙:

void checkBluetoothStatus() async {
  bool isBluetoothEnabled = await blePlugin.isBluetoothEnabled();
  if (!isBluetoothEnabled) {
    // 提示用户打开蓝牙
  }
}

10. 完整示例

以下是一个简单的 Flutter 应用程序示例,展示了如何使用 secugen_ble_plugin 进行蓝牙通信:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SecugenBlePlugin blePlugin = SecugenBlePlugin();
  runApp(MyApp(blePlugin: blePlugin));
}

class MyApp extends StatelessWidget {
  final SecugenBlePlugin blePlugin;

  MyApp({required this.blePlugin});

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

class BluetoothScreen extends StatefulWidget {
  final SecugenBlePlugin blePlugin;

  BluetoothScreen({required this.blePlugin});

  [@override](/user/override)
  _BluetoothScreenState createState() => _BluetoothScreenState();
}

class _BluetoothScreenState extends State<BluetoothScreen> {
  [@override](/user/override)
  void initState() {
    super.initState();
    setupDataListener();
  }

  void scanDevices() async {
    List<BluetoothDevice> devices = await widget.blePlugin.scanDevices();
    devices.forEach((device) {
      print('Device: ${device.name}, Address: ${device.address}');
    });
  }

  void connectToDevice(String deviceAddress) async {
    bool isConnected = await widget.blePlugin.connect(deviceAddress);
    if (isConnected) {
      print('Connected to device');
    } else {
      print('Failed to connect to device');
    }
  }

  void sendDataToDevice(String data) async {
    bool isSent = await widget.blePlugin.sendData(data);
    if (isSent) {
      print('Data sent successfully');
    } else {
      print('Failed to send data');
    }
  }

  void setupDataListener() {
    widget.blePlugin.setOnDataReceivedListener((String data) {
      print('Received data: $data');
    });
  }

  void disconnectDevice() async {
    bool isDisconnected = await widget.blePlugin.disconnect();
    if (isDisconnected) {
      print('Disconnected from device');
    } else {
      print('Failed to disconnect');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bluetooth Communication'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: scanDevices,
              child: Text('Scan Devices'),
            ),
            ElevatedButton(
              onPressed: () => connectToDevice('DEVICE_ADDRESS'),
              child: Text('Connect to Device'),
            ),
            ElevatedButton(
              onPressed: () => sendDataToDevice('Hello, Bluetooth!'),
              child: Text('Send Data'),
            ),
            ElevatedButton(
              onPressed: disconnectDevice,
              child: Text('Disconnect'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部