You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用flutter_blue_plus扫描不到BLE设备,寻求解决方案

解决方案:FlutterBluePlus 扫描不到BLE设备的排查与修复

1. 核心问题:未触发扫描动作

你的代码仅监听了扫描结果流,但没有调用启动扫描的API。FlutterBluePlus 需要主动调用 startScan() 才会开始搜索BLE设备,添加这一步是关键。

2. 权限配置验证

确保项目已配置对应平台的BLE权限:

Android(AndroidManifest.xml)

添加以下权限:

<!-- 适配Android 12+ -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 适配Android 11及以下 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

iOS(Info.plist)

添加蓝牙相关描述:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要蓝牙权限连接BLE设备</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>需要蓝牙权限扫描BLE设备</string>

3. 修改后的代码示例

修复扫描启动逻辑,同时优化结果处理:

static void displayBleDevices() async {
  // 先检查蓝牙是否开启
  if (await FlutterBluePlus.isOn == false) {
    print("蓝牙未开启,请打开蓝牙");
    return;
  }

  // 监听扫描结果
  var subscription = FlutterBluePlus.onScanResults.listen((results) {
    for (ScanResult result in results) {
      // 处理设备名称为空的情况
      String deviceName = result.advertisementData.advName.isNotEmpty 
          ? result.advertisementData.advName 
          : "无名设备";
      print('${result.device.remoteId}: "$deviceName" 信号强度: ${result.rssi}');
    }
  }, onError: (e) => print("扫描错误: $e"));

  // 启动扫描(设置10秒后自动停止)
  await FlutterBluePlus.startScan(timeout: const Duration(seconds: 10));
  
  // 扫描结束后取消订阅
  FlutterBluePlus.cancelWhenScanComplete(subscription);
}

4. 其他排查点

  • 确认目标BLE设备处于可发现状态:部分设备需要手动开启广播/可发现模式
  • 避免后台扫描限制:Android 12+ 后台扫描需要额外权限,测试时尽量保持APP在前台
  • 检查FlutterBluePlus版本:确保使用最新稳定版,避免已知bug

内容的提问来源于stack exchange,提问作者karthikeyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:32:07