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

flutter_blue_plus后台/锁屏状态下无法扫描设备问题求助

解决Flutter BLE全生命周期扫描问题

Android 端处理

权限配置

  • 在AndroidManifest.xml中补充必要权限:
    <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 12+ 后台扫描必需 -->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <!-- 前台服务权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
    
  • Android 13+需动态请求POST_NOTIFICATIONS权限,因为前台服务必须显示通知。

用前台服务替代Workmanager

Workmanager在应用killed状态下的执行受系统限制,BLE扫描更适合依赖前台服务:

  1. 编写Android原生Service子类,在服务内部启动flutter_blue_plus的扫描逻辑。
  2. 服务启动时调用startForeground(),传入持续显示的通知(系统强制要求,否则会终止服务)。
  3. Flutter层通过MethodChannel触发前台服务启动,确保应用killed/锁屏时扫描持续运行。

锁屏状态优化

  • 引导用户将应用加入电池优化白名单,避免系统锁屏时限制BLE扫描,可通过代码跳转系统设置:
    final packageInfo = await PackageInfo.fromPlatform();
    await AndroidIntent(
      action: 'android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS',
      data: 'package:${packageInfo.packageName}',
    ).launch();
    

iOS 端处理

iOS对后台BLE扫描有严格系统限制,无法实现killed状态下的主动扫描,但可优化后台扫描能力:

权限与配置

  • 在Info.plist中添加后台模式与权限描述:
    <key>UIBackgroundModes</key>
    <array>
      <string>bluetooth-central</string>
    </array>
    <key>NSBluetoothAlwaysUsageDescription</key>
    <string>需要蓝牙权限进行设备扫描</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>需要蓝牙权限进行设备扫描</string>
    

后台扫描配置

使用flutter_blue_plus的后台扫描API,调整参数适配iOS后台规则:

FlutterBluePlus.startScan(
  withServices: [],
  scanMode: ScanMode.lowPower, // 后台推荐低功耗模式,平衡扫描频率与续航
  allowDuplicates: true,
);
  • iOS后台扫描时,系统会限制扫描频率,无法达到前台实时性,但可在应用后台(未killed)时持续扫描。
  • iOS killed状态无法扫描:这是苹果系统硬性限制,应用被杀死后无法主动执行扫描,仅能通过特定蓝牙广告包触发唤醒(需硬件支持,配置复杂,无法实现全时段主动扫描)。

通用注意事项

  • 确保使用最新版本的flutter_blue_plus,旧版本可能存在后台扫描bug。
  • 扫描回调中避免执行耗时操作,防止被系统限制。
  • 测试必须使用真实设备,模拟器对BLE后台扫描支持有限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:52:17