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

Flutter开发Android Launcher如何设置唤醒时显示系统默认锁屏

Android Launcher息屏唤醒显示系统锁屏解决方案

方案一:优先调起系统默认锁屏

你当前遇到的跳过锁屏问题,本质是Launcher的主Activity配置了锁屏可展示的相关属性,系统判定可以跳过锁屏直接进入应用。按以下步骤修改即可:

  • 移除AndroidManifest.xml中主Activity节点下的锁屏相关属性,包括android:showWhenLocked="true"、android:turnScreenOn="true"等
  • 不要在主Activity的onCreate、onResume生命周期中动态添加以下Window标记:
    // 以下标记全部删除
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
    
  • 取消android.permission.SHOW_ON_LOCK_SCREEN权限申请,不要让应用获得锁屏展示权限
    完成以上修改后,绝大部分原生系统和第三方定制ROM都会在息屏唤醒时优先展示系统默认锁屏,解锁后才会进入你的Launcher。

方案二:自行实现拦截页面

如果部分定制ROM对默认Launcher做了特殊处理,方案一无法生效,可以自己开发拦截页面,首先需要获取设备解锁状态:

解锁状态获取方法

使用系统KeyguardManager类即可获取状态,不需要额外申请权限(Android 10及以上通用):

val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
// 设备是否设置了密码/指纹/人脸等锁屏验证方式
val hasLockMethod = keyguardManager.isKeyguardSecure
// 当前设备是否处于锁屏状态
val isLocked = keyguardManager.isKeyguardLocked

拦截逻辑实现

  • 注册ACTION_SCREEN_ON系统广播,接收到屏幕点亮的广播时,立刻调用上述代码判断解锁状态
  • 如果当前处于锁屏状态,直接跳转你开发的拦截页面,给拦截页的Window添加FLAG_SHOW_WHEN_LOCKED标记,保证页面可以在锁屏上展示,拦截用户对Launcher的操作
  • 监听系统解锁广播ACTION_USER_PRESENT,收到广播后自动关闭拦截页面,回到Launcher主界面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:06:04