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

flutter_blue_plus与flutter_foreground_task结合锁屏后BLE扫描失效求助

锁屏后BLE扫描失效的解决尝试方案

问题描述

将flutter_foreground_task与BLE扫描功能结合后,应用在前台、后台运行时均正常,但锁屏后(日志出现I/FA (24762): Application backgrounded at: timestamp_millis: ...),所有扫描操作完全失效。无论是持续扫描,还是在onRepeatEvent中每6秒触发一次扫描(控制30秒内startScan调用不超过5次),都无法获取扫描结果。

已配置的权限:

<uses-permission android:name="android.permission.INTERNET" />
<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.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

ForegroundService配置:

<service android:name="com.pravera.flutter_foreground_task.service.ForegroundService"
android:foregroundServiceType="dataSync|remoteMessaging|connectedDevice" android:exported="false" android:stopWithTask="false" />

日志信息:

D/[FBP-Android](29081): [FBP] onMethodCall: startScan
D/BluetoothAdapter(29081): isLeEnabled(): ON
D/BluetoothLeScanner(29081): onScannerRegistered() - status=0 scannerId=19 mScannerId=0
[log] startScan
[log] scanResults.listen(0)

可尝试的解决方法

  • 调整前台服务类型为location
    锁屏后BLE扫描需要位置类前台服务权限才能维持运行,修改配置:

    <service android:name="com.pravera.flutter_foreground_task.service.ForegroundService"
    android:foregroundServiceType="location" android:exported="false" android:stopWithTask="false" />
    

    同时在Flutter启动前台任务时指定对应类型:

    await FlutterForegroundTask.startService(
      notificationTitle: 'BLE扫描中',
      notificationText: '正在监测设备',
      foregroundServiceType: ForegroundServiceType.location,
    );
    
  • 移除BLUETOOTH_SCAN的neverForLocation标记
    部分Android设备会限制带有neverForLocation的BLE扫描在锁屏后的运行,尝试修改权限:

    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    

    如需版本适配可拆分配置:

    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" android:maxSdkVersion="33" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:minSdkVersion="34" />
    
  • 启用Partial唤醒锁
    防止设备进入深度睡眠,启动前台任务时配置唤醒锁:

    await FlutterForegroundTask.startService(
      notificationTitle: 'BLE扫描中',
      notificationText: '正在监测设备',
      wakeLockType: WakeLockType.partial,
      foregroundServiceType: ForegroundServiceType.location,
    );
    
  • 优化扫描策略,添加过滤条件
    只扫描目标设备的UUID或名称,减少系统资源占用,提升锁屏后扫描优先级:

    FlutterBluePlus.startScan(
      withServices: [Guid('目标设备UUID')],
      timeout: const Duration(seconds: 5),
    );
    
  • 引导用户添加电池优化白名单
    即使申请了权限,仍需手动引导用户将应用加入白名单:

    final packageInfo = await PackageInfo.fromPlatform();
    final intent = AndroidIntent(
      action: 'android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS',
      data: 'package:${packageInfo.packageName}',
    );
    await intent.launch();
    
  • 检查厂商后台限制
    国内小米、华为、vivo等厂商有独立后台管理机制,需引导用户开启应用的「后台运行权限」「自启动权限」「无限制后台耗电」等系统设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:37:11