Flutter蓝牙外设管理插件k_ble_peripheral的使用

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

Flutter蓝牙外设管理插件k_ble_peripheral的使用

概述

k_ble_peripheral 是一个用于在Peripheral模式下使用蓝牙的Flutter插件(包括广告和Gatt功能)。

入门指南

在撰写详细的教程之前,您可以先阅读示例代码来了解如何使用它。

注意事项

虽然我已经在我的项目中应用了这个库,但该库仍然处于开发阶段。

许可证

本库采用Apache 2.0许可证。


示例代码

以下是一个完整的示例代码,展示了如何使用 k_ble_peripheral 插件来管理蓝牙外设。

import 'package:flutter/material.dart';
import 'package:k_ble_peripheral_example/advertise_screen/advertise_screen.dart';
import 'package:k_ble_peripheral_example/gatt_screen/gatt_screen.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  // 定义页面列表
  final pages = [AdvertiseScreen(), GattScreen()];
  
  // 当前选中的页面索引
  var currentIndex = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('示例代码 - k_ble_peripheral'),
        ),
        body: pages[currentIndex], // 根据当前索引显示不同的页面
        bottomNavigationBar: BottomNavigationBar(
          currentIndex: currentIndex, // 设置当前选中的底部导航项
          onTap: (index) {
            // 更新当前选中的页面索引
            setState(() {
              currentIndex = index;
            });
          },
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.online_prediction), // 广告图标
              label: '广告', // 广告标签
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.settings_remote), // GATT服务图标
              label: 'GATT服务', // GATT服务标签
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


k_ble_peripheral 是一个用于在 Flutter 应用中管理蓝牙外设(Peripheral)的插件。它允许你的应用作为蓝牙外设,广播数据并与其他蓝牙设备进行通信。以下是使用 k_ble_peripheral 插件的基本步骤和示例代码。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 k_ble_peripheral 依赖:

dependencies:
  flutter:
    sdk: flutter
  k_ble_peripheral: ^0.1.0  # 请检查最新版本号

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

2. 导入插件

在需要使用蓝牙外设功能的 Dart 文件中导入插件:

import 'package:k_ble_peripheral/k_ble_peripheral.dart';

3. 初始化插件

在使用插件之前,需要先初始化它:

KBlePeripheral blePeripheral = KBlePeripheral();

4. 检查蓝牙支持

在开始广播之前,检查设备是否支持蓝牙外设功能:

bool isSupported = await blePeripheral.isSupported();
if (!isSupported) {
  print("Bluetooth Peripheral is not supported on this device.");
  return;
}

5. 设置广播数据

设置你想要广播的数据,包括服务UUID、特征值等:

await blePeripheral.addService(
  serviceUuid: "00001234-0000-1000-8000-00805F9B34FB",
  characteristicUuid: "00001235-0000-1000-8000-00805F9B34FB",
  value: [0x01, 0x02, 0x03], // 特征值
  permissions: [CharacteristicPermission.read],
  properties: [CharacteristicProperty.read],
);

6. 开始广播

开始广播设置的服务:

await blePeripheral.startAdvertising(
  localName: "MyPeripheral",
  serviceUuids: ["00001234-0000-1000-8000-00805F9B34FB"],
);

7. 处理连接

你可以监听其他设备的连接和断开事件:

blePeripheral.onDeviceConnected.listen((device) {
  print("Device connected: ${device.address}");
});

blePeripheral.onDeviceDisconnected.listen((device) {
  print("Device disconnected: ${device.address}");
});

8. 停止广播

当你不再需要广播时,可以停止广播:

await blePeripheral.stopAdvertising();

9. 处理异常

在处理蓝牙外设时,可能会遇到各种异常情况,建议添加异常处理:

try {
  await blePeripheral.startAdvertising(
    localName: "MyPeripheral",
    serviceUuids: ["00001234-0000-1000-8000-00805F9B34FB"],
  );
} catch (e) {
  print("Failed to start advertising: $e");
}

10. 清理资源

在不再使用蓝牙外设功能时,清理资源:

await blePeripheral.dispose();

完整示例

以下是一个完整的示例,展示了如何使用 k_ble_peripheral 插件:

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

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

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

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

class _BluetoothPeripheralScreenState extends State<BluetoothPeripheralScreen> {
  KBlePeripheral blePeripheral = KBlePeripheral();

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

  Future<void> initializePeripheral() async {
    bool isSupported = await blePeripheral.isSupported();
    if (!isSupported) {
      print("Bluetooth Peripheral is not supported on this device.");
      return;
    }

    await blePeripheral.addService(
      serviceUuid: "00001234-0000-1000-8000-00805F9B34FB",
      characteristicUuid: "00001235-0000-1000-8000-00805F9B34FB",
      value: [0x01, 0x02, 0x03],
      permissions: [CharacteristicPermission.read],
      properties: [CharacteristicProperty.read],
    );

    await blePeripheral.startAdvertising(
      localName: "MyPeripheral",
      serviceUuids: ["00001234-0000-1000-8000-00805F9B34FB"],
    );

    blePeripheral.onDeviceConnected.listen((device) {
      print("Device connected: ${device.address}");
    });

    blePeripheral.onDeviceDisconnected.listen((device) {
      print("Device disconnected: ${device.address}");
    });
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Bluetooth Peripheral"),
      ),
      body: Center(
        child: Text("Broadcasting as a Bluetooth Peripheral"),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!