【Flutter】Flutter 进程保活 ③ ( 屏幕常亮设置 | Flutter 禁止息屏、关闭自动锁屏、屏蔽系统屏保 )

📅 2026/7/9 18:26:10 👁️ 阅读次数 📝 编程学习
【Flutter】Flutter 进程保活 ③ ( 屏幕常亮设置 | Flutter 禁止息屏、关闭自动锁屏、屏蔽系统屏保 )

文章目录

  • 一、Flutter 屏幕常亮需求
    • 1、业务场景
    • 2、底层核心原理
  • 二、使用 wakelock_plus 插件开发 Flutter 屏幕常亮功能
    • 1、wakelock_plus 插件介绍
    • 2、引入 wakelock_plus 依赖
    • 3、wakelock_plus 插件对应的不同平台配置
    • 4、wakelock_plus 插件基础用法代码
    • 5、wakelock_plus 插件监听单个页面的生命周期
    • 6、wakelock_plus 插件监听 APP 应用前后台变化
    • 7、wakelock_plus 插件开发注意事项
    • 章节总结
  • 三、Android 开发配置
    • 1、添加权限
    • 2、Activity 代码

参考文档 :

  • Flutter 官方文档 : https://docs.flutter.dev/install/quick
  • 使用出现网络问题 , 参考 在中国网络环境下使用 Flutter 文档 ;
  • 使用 VS Code 开发 Flutter 环境安装 :https://docs.flutter.cn/install/with-vs-code
  • VS Code 安装 :https://code.visualstudio.com/docs/setup/setup-overview





一、Flutter 屏幕常亮需求




1、业务场景


日常 Flutter 开发中 , 很多业务场景需要 APP 页面长期保持屏幕常亮 , 不自动变暗、不进入息屏、不触发系统屏保 :

  • 视频播放、直播投屏页面
  • 车载设备、工业平板控制终端
  • 扫码开票、设备巡检长驻页面
  • 实时数据监控、WebSocket设备状态大屏
  • 阅读器、文档长浏览页面

Flutter 自带没有屏幕常亮API ;

Flutter 是纯 UI 框架 ,无法直接操作系统底层电源、锁屏权限 ;

屏幕息屏 / 锁屏是安卓、iOS原生系统电源管理机制, Flutter 只能通过成熟第三方插件调用原生系统唤醒锁实现 ;


2、底层核心原理


手机/平板系统默认搭载电源省电策略 :设备无触摸操作一段时间后 ,自动降低屏幕亮度→屏幕变暗→关闭屏幕 ( 息屏 ) →启动系统屏保→设备锁屏 ,降低设备功耗 ;

  • 屏幕变暗 :系统自动降低屏幕亮度 ( 常亮可禁止 )
  • 屏幕息屏 :屏幕黑屏关闭 ( 常亮可禁止 )
  • 系统屏保 :闲置后弹出屏保画面 ( 常亮可禁止 )
  • 设备锁屏 :触发密码/指纹锁屏 ( 常亮可禁止 )
  • 后台保活 :屏幕常亮 不能 保证APP退后台不被杀进程 , 仅控制屏幕硬件状态 ;

安卓、iOS、Windows、鸿蒙全平台底层都提供 WakeLock ( 电源唤醒锁 ) 系统能力 :

  • 应用申请持有唤醒锁后 , 会向系统电源管理器发送常驻保活指令 ;
  • 系统强制终止当前APP页面的自动休眠、变暗、屏保、锁屏逻辑 , 直到代码主动释放唤醒锁 ;

使用 Flutter 屏幕常亮插件 wakelock_plus , 本质工作 :

  • Flutter层调用插件方法
  • 插件桥接调用 Android/iOS 原生系统API
  • 原生申请/释放 WakeLock 唤醒锁
  • 控制系统屏幕休眠策略




二、使用 wakelock_plus 插件开发 Flutter 屏幕常亮功能




1、wakelock_plus 插件介绍


wakelock_plus 插件 是 Flutter 社区官方维护的跨平台屏幕唤醒锁插件 , 支持 Android / iOS / MacOS / Windows / Linux / Web ; 适配 Flutter3.0+ 全部新版本 ;


2、引入 wakelock_plus 依赖


pubspec.yaml 引入依赖 :

dependencies: wakelock_plus: ^1.6.1# 截止2026最新稳定版本

终端执行拉取依赖 :

flutter pub get

3、wakelock_plus 插件对应的不同平台配置


wakelock_plus 插件对应的不同平台配置 :

  • Android :无需手动配置权限 , 插件内部自动注册
  • iOS :零配置 , 直接使用
  • 桌面/Web : 零配置 , 系统原生API直接调用

4、wakelock_plus 插件基础用法代码


wakelock_plus 插件基础用法代码 :单行代码开关屏幕常亮 ;

import'package:wakelock_plus/wakelock_plus.dart';// 1. 开启屏幕常亮 —— 禁止息屏、屏保、自动锁屏awaitWakelockPlus.enable();// 2. 关闭屏幕常亮 —— 恢复系统默认省电策略awaitWakelockPlus.disable();// 3. 查询当前是否处于常亮状态bool isKeepAlive=awaitWakelockPlus.isEnabled;

以上三行代码 , 即可实现全局屏幕不息屏!


5、wakelock_plus 插件监听单个页面的生命周期


直接调用WakelockPlus.enable()代码 , 退出应用时如果没有WakelockPlus.disable()关闭 , 则出现 :

  • 退出当前页面 , 全局手机一直常亮 , 手机无法锁屏 , 异常耗电
  • APP退到后台仍然保持唤醒 , 系统弹窗警告耗电异常
  • 页面重复开启关闭 , 状态错乱
    正确开发规范 : 跟随页面/APP生命周期自动控制常亮状态

代码示例如下 :

import'package:flutter/material.dart';import'package:wakelock_plus/wakelock_plus.dart';classMonitorPageextendsStatefulWidget{constMonitorPage({super.key});@overrideState<MonitorPage>createState()=>_MonitorPageState();}class_MonitorPageStateextendsState<MonitorPage>{@overridevoidinitState(){super.initState();// 页面初始化 : 开启屏幕常亮 , 禁止息屏屏保WakelockPlus.enable();}@overridevoiddispose(){// 核心 : 页面销毁 , 立刻关闭常亮 , 归还系统电源权限WakelockPlus.disable();super.dispose();}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText('设备监控(屏幕常亮)')),body:constCenter(child:Text('当前页面永不自动息屏')),);}}

6、wakelock_plus 插件监听 APP 应用前后台变化


APP前台页面常亮 , 退后台自动关闭常亮省电 ,结合 WidgetsBindingObserver 监听应用生命周期 :

class_MonitorPageStateextendsState<MonitorPage>withWidgetsBindingObserver{@overridevoidinitState(){super.initState();WidgetsBinding.instance.addObserver(this);WakelockPlus.enable();}// 监听APP生命周期变化@overridevoiddidChangeAppLifecycleState(AppLifecycleStatestate){super.didChangeAppLifecycleState(state);switch(state){// APP前台运行 : 开启常亮caseAppLifecycleState.resumed:WakelockPlus.enable();break;// APP退后台、弹窗覆盖 : 关闭常亮省电caseAppLifecycleState.paused:caseAppLifecycleState.inactive:WakelockPlus.disable();break;default:break;}}@overridevoiddispose(){WidgetsBinding.instance.removeObserver(this);WakelockPlus.disable();super.dispose();}}

7、wakelock_plus 插件开发注意事项


wakelock_plus 插件开发注意事项 :

  • 忘记 disable 关闭唤醒锁 :
    • 只调用 enable() 不关闭 :APP退出、页面关闭后 , 手机永久无法自动息屏 ; 用户手机耗电飙升 , 应用商店审核不通过 ;
    • 解决方案 :initState 开启、dispose/onClose 强制关闭
  • 使用废弃 wakelock 原始插件 :原始 wakelock 停止维护 , Flutter3.3+编译报错、iOS平台失效 ; 全部替换为 wakelock_plus ;
  • 屏幕常亮≠后台保活 :很多开发者混淆概念 , 屏幕常亮仅仅控制屏幕硬件不黑屏 , 无法防止APP退后台被系统杀死进程 ; 后台保活需要单独配置原生后台权限 ;
  • 系统省电模式失效问题 :手机开启【超级省电/极限省电模式】时 , 系统强制剥夺APP唤醒锁权限 , 常亮功能失效 ; 属于系统级限制 , APP代码无法绕过!

章节总结

1、Flutter 无原生息屏控制API, 底层依靠系统 WakeLock 唤醒锁 实现屏幕常亮 ;
2、生产环境优先 wakelock_plus 插件, 全平台零配置、开发效率最高 ;
3、核心开发准则 : 页面进入开启、页面销毁关闭、后台自动关闭 , 杜绝耗电异常 ;
4、区分屏幕常亮进程后台保活, 避免业务需求理解偏差 ;
5、系统省电模式 会强制失效该功能, 属于正常系统限制 ;





三、Android 开发配置



本章节内容 , 仅做参考 , 如果报错时 , 考虑手动添加如下内容 ;


1、添加权限


Android平台必须添加对应系统权限 , 否则无法弹出授权弹窗 , 在 android/app/src/main/AndroidManifest.xml 中配置如下 权限 ;

<manifestxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><!-- 屏幕常亮权限 --><uses-permissionandroid:name="android.permission.WAKE_LOCK"/></manifest>

2、Activity 代码


importio.flutter.embedding.android.FlutterActivityimportio.flutter.embedding.engine.FlutterEngineimportandroid.view.WindowManagerclassMainActivity:FlutterActivity(){overridefunconfigureFlutterEngine(flutterEngine:FlutterEngine){super.configureFlutterEngine(flutterEngine)window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)}}