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

📅 2026/7/9 18:10:41
【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-codeVS 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 get3、wakelock_plus 插件对应的不同平台配置wakelock_plus 插件对应的不同平台配置 :Android :无需手动配置权限 , 插件内部自动注册iOS :零配置 , 直接使用桌面/Web : 零配置 , 系统原生API直接调用4、wakelock_plus 插件基础用法代码wakelock_plus 插件基础用法代码 :单行代码开关屏幕常亮 ;importpackage:wakelock_plus/wakelock_plus.dart;// 1. 开启屏幕常亮 —— 禁止息屏、屏保、自动锁屏awaitWakelockPlus.enable();// 2. 关闭屏幕常亮 —— 恢复系统默认省电策略awaitWakelockPlus.disable();// 3. 查询当前是否处于常亮状态bool isKeepAliveawaitWakelockPlus.isEnabled;以上三行代码 , 即可实现全局屏幕不息屏5、wakelock_plus 插件监听单个页面的生命周期直接调用WakelockPlus.enable()代码 , 退出应用时如果没有WakelockPlus.disable()关闭 , 则出现 :退出当前页面 , 全局手机一直常亮 , 手机无法锁屏 , 异常耗电APP退到后台仍然保持唤醒 , 系统弹窗警告耗电异常页面重复开启关闭 , 状态错乱正确开发规范 : 跟随页面/APP生命周期自动控制常亮状态代码示例如下 :importpackage:flutter/material.dart;importpackage:wakelock_plus/wakelock_plus.dart;classMonitorPageextendsStatefulWidget{constMonitorPage({super.key});overrideStateMonitorPagecreateState()_MonitorPageState();}class_MonitorPageStateextendsStateMonitorPage{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_MonitorPageStateextendsStateMonitorPagewithWidgetsBindingObserver{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:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/tools!-- 屏幕常亮权限 --uses-permissionandroid:nameandroid.permission.WAKE_LOCK//manifest2、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)}}