Flutter低功耗蓝牙插件bluetooth_low_energy_windows的使用

Flutter低功耗蓝牙插件bluetooth_low_energy_windows的使用

该插件是 bluetooth_low_energy 包在Windows平台上的实现。

使用方法

这个包是经过推荐的,因此你可以直接使用 bluetooth_low_energy。当你使用它时,这个包会自动包含在你的应用程序中,所以你不需要将其添加到你的 pubspec.yaml 文件中。

但是,如果你导入此包以直接使用其任何API,你应该像往常一样将其添加到你的 pubspec.yaml 文件中。


示例代码

以下是一个简单的示例代码,展示了如何在Flutter应用中使用 bluetooth_low_energy_windows 插件。

import 'dart:async';
import 'dart:developer';

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

// 导入蓝牙低功耗插件
import 'package:bluetooth_low_energy/bluetooth_low_energy.dart';

void main() {
  // 在启动应用前运行一些初始化操作
  runZonedGuarded(onStartUp, onCrashed);
}

void onStartUp() async {
  // 初始化日志记录器
  Logger.root.onRecord.listen(onLogRecord);
  hierarchicalLoggingEnabled = true;

  // 启动应用
  runApp(const MyApp());
}

void onCrashed(Object error, StackTrace stackTrace) {
  // 记录应用崩溃信息
  Logger.root.shout('App crashed.', error, stackTrace);
}

void onLogRecord(LogRecord record) {
  // 自定义日志输出
  log(
    record.message,
    time: record.time,
    sequenceNumber: record.sequenceNumber,
    level: record.level.value,
    name: record.loggerName,
    zone: record.zone,
    error: record.error,
    stackTrace: record.stackTrace,
  );
}

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

  @override
  Widget build(BuildContext context) {
    // 设置路由配置
    return MaterialApp.router(
      routerConfig: routerConfig,
      theme: ThemeData.light().copyWith(
        materialTapTargetSize: MaterialTapTargetSize.padded,
      ),
      darkTheme: ThemeData.dark().copyWith(
        materialTapTargetSize: MaterialTapTargetSize.padded,
      ),
    );
  }
}

运行步骤

  1. 安装依赖: 确保你的项目已经添加了必要的依赖项。虽然这个包是自动包含的,但如果你需要使用其API,你仍然需要在 pubspec.yaml 中添加它。

    dependencies:
      flutter:
        sdk: flutter
      bluetooth_low_energy: ^0.1.0
    
  2. 导入插件: 在你的 Dart 文件中导入蓝牙低功耗插件:

    import 'package:bluetooth_low_energy/bluetooth_low_energy.dart';
    
  3. 初始化蓝牙: 在应用启动时初始化蓝牙设备管理器,并监听蓝牙状态变化。

    void onStartUp() async {
      // 初始化日志记录器
      Logger.root.onRecord.listen(onLogRecord);
      hierarchicalLoggingEnabled = true;
    
      // 初始化蓝牙管理器
      final manager = BluetoothManager.instance;
    
      // 监听蓝牙状态变化
      manager.state.listen((state) {
        print('Bluetooth state changed: $state');
      });
    
      // 启动应用
      runApp(const MyApp());
    }
    

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用bluetooth_low_energy_windows插件来与低功耗蓝牙设备进行交互的代码示例。这个示例将展示如何初始化蓝牙适配器、扫描设备以及连接到设备并读取服务、特征和值。

首先,确保你已经在pubspec.yaml文件中添加了bluetooth_low_energy_windows依赖:

dependencies:
  flutter:
    sdk: flutter
  bluetooth_low_energy_windows: ^x.y.z  # 替换为最新版本号

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

接下来,在你的Flutter项目中,你可以创建一个新的Dart文件来处理蓝牙操作,例如bluetooth_service.dart

import 'package:flutter/services.dart';
import 'package:bluetooth_low_energy_windows/bluetooth_low_energy_windows.dart';

class BluetoothService {
  late BluetoothAdapter adapter;
  late BluetoothManager manager;

  BluetoothService() {
    BluetoothManager.instance.then((value) {
      manager = value;
      adapter = manager.defaultAdapter;
      initBluetooth();
    });
  }

  Future<void> initBluetooth() async {
    if (!adapter.isPoweredOn) {
      await adapter.requestEnable();
    }
  }

  Future<List<BluetoothDevice>> scanDevices() async {
    List<BluetoothDevice> devices = [];
    try {
      adapter.startDiscovery(null).listen((device) {
        devices.add(device);
        print("Found device: ${device.name}, Address: ${device.address}");
      }, onError: (error) {
        print("Scan error: $error");
      }, onDone: () {
        print("Scan done");
      });

      // 这里我们简单地等待5秒来模拟扫描过程,然后停止扫描
      await Future.delayed(Duration(seconds: 5));
      adapter.stopDiscovery();
    } catch (e) {
      print("Error scanning for devices: $e");
    }
    return devices;
  }

  Future<BluetoothRemoteDevice?> connectToDevice(String deviceAddress) async {
    BluetoothRemoteDevice? device = await adapter.getRemoteDevice(deviceAddress);
    if (device != null && !device.isConnected) {
      await device.connect();
      print("Connected to device: ${device.name}, Address: ${device.address}");
    }
    return device;
  }

  Future<void> discoverServices(BluetoothRemoteDevice device) async {
    try {
      List<BluetoothService> services = await device.discoverServices();
      services.forEach((service) {
        print("Service UUID: ${service.uuid}");
        service.characteristics.forEach((characteristic) {
          print("  Characteristic UUID: ${characteristic.uuid}");
          characteristic.readValue().then((value) {
            print("    Value: ${value}");
          });
        });
      });
    } catch (e) {
      print("Error discovering services: $e");
    }
  }
}

然后,在你的主Dart文件(例如main.dart)中,你可以使用BluetoothService类来初始化蓝牙并进行设备扫描和连接等操作:

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

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

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

class BluetoothScreen extends StatefulWidget {
  @override
  _BluetoothScreenState createState() => _BluetoothScreenState();
}

class _BluetoothScreenState extends State<BluetoothScreen> {
  late BluetoothService bluetoothService;
  List<String> deviceAddresses = [];

  @override
  void initState() {
    super.initState();
    bluetoothService = BluetoothService();
    scanForDevices();
  }

  Future<void> scanForDevices() async {
    List<BluetoothDevice> devices = await bluetoothService.scanDevices();
    setState(() {
      deviceAddresses = devices.map((device) => device.address).toList();
    });
  }

  Future<void> connectToDevice(String address) async {
    BluetoothRemoteDevice? device = await bluetoothService.connectToDevice(address);
    if (device != null) {
      bluetoothService.discoverServices(device);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bluetooth Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Text('Scanned Devices:'),
            ...deviceAddresses.map((address) => ElevatedButton(
              onPressed: () => connectToDevice(address),
              child: Text("Connect to $address"),
            )).toList(),
          ],
        ),
      ),
    );
  }
}

这个示例代码展示了如何初始化蓝牙适配器、扫描设备、连接到设备以及发现服务和特征。请注意,这只是一个基本的示例,实际应用中可能需要处理更多的错误情况和边界情况。此外,bluetooth_low_energy_windows插件的API可能会随着版本的更新而变化,因此请参考最新的插件文档以获取最新的API信息和最佳实践。

回到顶部