flutter_blue_plus如何获取蓝牙设备列表

我在使用flutter_blue_plus插件时遇到问题,无法正确获取蓝牙设备列表。已经按照文档调用了startScan方法,但扫描不到任何设备。请问:

  1. 是否需要额外配置权限?
  2. 安卓和iOS的获取方式有区别吗?
  3. 正确的设备扫描流程是什么?
  4. 如何过滤扫描到的设备?
2 回复

使用 flutter_blue_plus 获取蓝牙设备列表的步骤:

  1. 启动蓝牙扫描:FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
  2. 监听扫描结果:FlutterBluePlus.scanResults.listen((results) { ... });
  3. 在监听器中处理设备列表:results 包含发现的设备信息。

注意:需要蓝牙权限和设备定位权限。

更多关于flutter_blue_plus如何获取蓝牙设备列表的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


使用 flutter_blue_plus 获取蓝牙设备列表的步骤如下:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter_blue_plus: ^1.0.0

2. 配置权限

Android(在 android/app/src/main/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(在 ios/Runner/Info.plist 中添加):

<dict>
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>需要蓝牙权限来扫描设备</string>
</dict>

3. 核心代码示例

import 'package:flutter_blue_plus/flutter_blue_plus.dart';

class BluetoothListPage extends StatefulWidget {
  @override
  _BluetoothListPageState createState() => _BluetoothListPageState();
}

class _BluetoothListPageState extends State<BluetoothListPage> {
  List<BluetoothDevice> _devices = [];

  @override
  void initState() {
    super.initState();
    _startScan();
  }

  void _startScan() {
    // 开始扫描
    FlutterBluePlus.startScan(timeout: Duration(seconds: 10));

    // 监听扫描结果
    FlutterBluePlus.scanResults.listen((results) {
      setState(() {
        _devices = results.map((r) => r.device).toList();
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        itemCount: _devices.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(_devices[index].name.isEmpty ? 'Unknown' : _devices[index].name),
            subtitle: Text(_devices[index].remoteId.toString()),
          );
        },
      ),
    );
  }
}

4. 关键说明

  • 调用 FlutterBluePlus.startScan() 开始扫描
  • 通过 FlutterBluePlus.scanResults 监听扫描结果
  • 扫描结果包含 BluetoothDevice 对象列表
  • 实际使用时需要处理权限请求(可使用 permission_handler 包)

5. 停止扫描

FlutterBluePlus.stopScan();

注意:扫描会消耗较多电量,建议在页面销毁时停止扫描。

回到顶部