Flutter蓝牙管理插件bluetooth_manager的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter蓝牙管理插件 bluetooth_manager 的使用

bluetooth_manager 是一个用于控制蓝牙基本功能的 Android 插件,可以用来打开/关闭蓝牙并获取蓝牙状态。

如何开始

首先需要导入库:

import 'package:bluetooth_manager/bluetooth_manager.dart';

使用示例

示例:获取蓝牙状态

// 获取蓝牙状态
// 返回 BluetoothState 类型
// 可能的状态有 on, off 和 unknow
BluetoothState bluetoothState = await bluetoothManager.getBluetoothState();
print(bluetoothState);

示例:监听蓝牙状态变化

// 监听蓝牙状态变化
// 返回 BluetoothState 类型
// 可能的状态有 on, off 和 unknow
bluetoothManager.getBluetoothStateStream().listen((BluetoothState bluetoothState) {
    print(bluetoothState);
    // 在此处执行你的逻辑...
});

示例:打开/关闭蓝牙

// 打开蓝牙
ActionResponse actionResponse = await bluetoothManager.enableBluetooth();
print(actionResponse);

// 关闭蓝牙
actionResponse = await bluetoothManager.disableBluetooth();
print(actionResponse);

完整示例 Demo

下面是一个完整的 Flutter 应用程序示例,展示了如何使用 bluetooth_manager 插件来管理蓝牙设备的状态。

// ignore_for_file: avoid_print

import 'dart:async';

import 'package:bluetooth_manager/models/bluetooth_models.dart';
import 'package:flutter/material.dart';

import 'package:bluetooth_manager/bluetooth_manager.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  BluetoothManager bluetoothManager = BluetoothManager();

  late BluetoothState _bluetoothState = BluetoothState.uknow;

  StreamSubscription<BluetoothState>? subscription;
  bool isListenerOn = false;

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

  setBluetoothPermission() async {
    print(await Permission.bluetooth.request().isGranted);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              const SizedBox(height: 20),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const Text(
                    'Bluetooth State: ',
                    style: TextStyle(fontSize: 24),
                  ),
                  Text(
                    _bluetoothState.toString().split('.').last,
                    style: TextStyle(
                      fontSize: 24,
                      color: _bluetoothState == BluetoothState.on
                          ? Colors.green
                          : _bluetoothState == BluetoothState.off
                              ? Colors.red
                              : Colors.grey,
                    ),
                  )
                ],
              ),
              const SizedBox(height: 50),
              ElevatedButton(
                onPressed: () async {
                  /// 如果监听器已启用,则取消它,并获取当前蓝牙状态
                  if (subscription != null) {
                    setState(() {
                      isListenerOn = false;
                    });
                    subscription!.cancel();
                  }

                  /// 获取蓝牙状态
                  /// 并将 [BluetoothState] 设置为本地变量 _bluetoothState
                  BluetoothState bluetoothState =
                      await bluetoothManager.getBluetoothState();
                  setState(() {
                    _bluetoothState = bluetoothState;
                  });
                },
                child: const Text('Get bluetooth State'),
              ),
              const SizedBox(height: 50),
              Text(
                isListenerOn ? 'Listener On' : 'Listener Off',
                style: const TextStyle(fontSize: 16),
              ),
              ElevatedButton(
                onPressed: () async {
                  /// 监听蓝牙状态变化
                  /// 并将 [BluetoothState] 设置为本地变量 _bluetoothState
                  /// 不要忘记在不再使用时取消监听
                  setState(() {
                    isListenerOn = true;
                  });
                  subscription = bluetoothManager
                      .getBluetoothStateStream(timer: 500)
                      .listen((BluetoothState bluetoothState) {
                    setState(() {
                      _bluetoothState = bluetoothState;
                    });
                  });
                },
                child: const Text('Listen/Pause bluetooth State'),
              ),
              const SizedBox(height: 50),
              ElevatedButton(
                onPressed: () async {
                  /// 验证蓝牙状态
                  if (_bluetoothState == BluetoothState.on) {
                    /// 如果蓝牙已开启,则关闭蓝牙
                    ActionResponse actionResponse =
                        await bluetoothManager.disableBluetooth();
                    print(actionResponse);
                  } else {
                    /// 如果蓝牙已关闭,则打开蓝牙
                    ActionResponse actionResponse =
                        await bluetoothManager.enableBluetooth();
                    print(actionResponse);
                  }
                },
                child: const Text('Turn on/off'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用bluetooth_manager插件的示例代码。这个插件通常用于管理蓝牙设备的连接和数据传输。请注意,由于bluetooth_manager可能不是一个广泛认知的官方或广泛使用的Flutter插件,下面的示例代码假设它类似于其他蓝牙管理插件的API。如果bluetooth_manager插件的API有所不同,请参考其官方文档进行调整。

首先,确保在你的pubspec.yaml文件中添加bluetooth_manager依赖项(假设该插件存在且已发布到pub.dev):

dependencies:
  flutter:
    sdk: flutter
  bluetooth_manager: ^x.y.z  # 替换为实际版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用bluetooth_manager插件:

1. 导入插件

在你的Dart文件中,导入bluetooth_manager插件:

import 'package:bluetooth_manager/bluetooth_manager.dart';

2. 初始化蓝牙管理器

通常,你需要在你的应用中初始化蓝牙管理器。这可以在应用的某个初始化阶段完成,比如在initState方法中(如果你是在一个StatefulWidget中)。

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BluetoothManager? bluetoothManager;

  @override
  void initState() {
    super.initState();
    // 初始化蓝牙管理器
    bluetoothManager = BluetoothManager.instance;

    // 请求蓝牙权限(如果需要)
    bluetoothManager?.requestBluetoothPermissions().then((granted) {
      if (granted) {
        // 权限被授予,可以继续进行蓝牙操作
        initBluetooth();
      } else {
        // 权限被拒绝,处理错误情况
        print("Bluetooth permissions denied");
      }
    });
  }

  void initBluetooth() {
    // 初始化蓝牙适配器状态等
    bluetoothManager?.startBluetoothScan().then((scanResult) {
      // 处理扫描结果
      print("Scan Result: $scanResult");
    }).catchError((error) {
      // 处理错误
      print("Error scanning for Bluetooth devices: $error");
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 你的应用UI
    );
  }
}

3. 扫描蓝牙设备

一旦蓝牙管理器初始化完成,你可以开始扫描蓝牙设备。

void startScanningForDevices() {
  bluetoothManager?.startBluetoothScan().listen((device) {
    // 处理每个发现的设备
    print("Discovered device: ${device.name}, address: ${device.address}");
  }, onError: (error) {
    // 处理扫描错误
    print("Error scanning for devices: $error");
  }, onDone: () {
    // 扫描完成
    print("Scanning for devices completed");
  });
}

4. 连接设备并传输数据

一旦找到你想要连接的设备,你可以尝试建立连接,并进行数据传输。

void connectToDevice(BluetoothDevice device) {
  bluetoothManager?.connectToDevice(device).then((connection) {
    // 设备连接成功
    print("Connected to device: ${device.name}");

    // 发送数据到设备
    connection.sendData("Hello, Bluetooth device!".toUint8List());

    // 监听来自设备的数据
    connection.onDataReceived.listen((data) {
      // 处理接收到的数据
      print("Received data: ${String.fromCharCodes(data)}");
    });
  }).catchError((error) {
    // 处理连接错误
    print("Error connecting to device: $error");
  });
}

注意事项

  1. 权限处理:确保你的应用有适当的权限来访问蓝牙功能。这通常包括在AndroidManifest.xml中添加必要的权限,并在运行时请求用户授权。

  2. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以确保应用的健壮性。

  3. 插件文档:由于bluetooth_manager可能是一个非官方或特定用途的插件,请参考其官方文档以获取最新的API信息和最佳实践。

  4. 兼容性:确保你的插件与你的Flutter SDK版本兼容,并在多个设备和操作系统版本上进行测试。

  5. 更新和维护:定期检查插件的更新,以确保你使用的是最新和最安全的版本。

回到顶部