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

Flutter中使用flutter_blue无法显示部分蓝牙设备名称的求助

解决flutter_blue无法显示部分蓝牙设备名称的建议

1. 检查ESP32的蓝牙广播配置

  • 确认ESP32代码中已正确设置设备名称,比如Arduino框架下需调用BLEDevice::init("你的设备名"),且名称长度不超过16字节(BLE设备名称的标准限制)。
  • 验证ESP32的广播包是否包含完整本地名称字段,部分设备可能仅设置了短名称或未在广播中暴露名称,导致flutter_blue无法直接读取。

2. 调整flutter_blue的扫描逻辑

  • 移除扫描过滤条件:如果调用startScan()时传入了withServices参数,会过滤掉未包含指定服务UUID的设备(ESP32可能未配置对应服务),改为无参数调用flutterBlue.startScan(timeout: Duration(seconds: 5))。
  • 优先读取广播数据中的名称:部分设备的device.name为空,但广播数据里的advertisementData.localName可能包含名称,修改扫描代码如下:
flutterBlue.startScan(timeout: Duration(seconds: 5)).listen((ScanResult result) {
  String deviceName = result.device.name.isNotEmpty 
      ? result.device.name 
      : result.advertisementData.localName.isNotEmpty 
          ? result.advertisementData.localName 
          : "未知设备(${result.device.id.toString().substring(0, 8)})";
  print("检测到设备: $deviceName");
});

3. 确认Android权限的完整性

  • Android 12+ 需在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
  • 确保已动态申请运行时权限:Android 6.0+ 需请求ACCESS_FINE_LOCATION(Android 11及以下)或BLUETOOTH_SCAN(Android 12+)权限,否则无法正常扫描BLE设备。

4. 排查flutter_blue版本兼容性

  • 尝试升级flutter_blue到最新稳定版,或降级到已知稳定的版本(如0.8.0),部分旧版本存在BLE设备名称解析的bug。
  • 确认Flutter SDK版本与flutter_blue版本兼容,避免因版本不匹配导致的异常。

5. 验证ESP32的广播参数

  • 检查ESP32的广播间隔设置,建议控制在100ms-1000ms之间,间隔太长可能导致手机扫描时无法捕获广播包。
  • 确保ESP32未开启隐藏广播模式,部分配置会让设备仅在连接后才暴露名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:25:04