showWhenLocked 和 showOnLockScreen的区别

QuibblerQuibbler 2025-10-12 约 6 分钟 887 次阅读

showWhenLocked 和 showOnLockScreen的区别

showWhenLocked 和 showOnLockScreen 是在 Android 开发中用于控制Activity在锁屏状态下显示的两个标志,让Activity在设备处于锁屏状态时依旧能够显示在屏幕最前端,用户无需解锁即可看到并操作该界面。典型用途:

        ·来电界面、闹钟响铃、计时器结束提醒

        ·运动/导航实时状态、门禁/乘车二维码

        ·紧急呼叫、医疗急救等关键场景

这两个标志的作用相似但有区别。

1、showWhenLocked

作用:允许 Activity 在设备锁屏时显示在最前面,即覆盖锁屏界面。API 级别:从 Android 8.1(API 27)开始支持。

/**
     * Specifies whether an {@link Activity} should be shown on top of the lock screen whenever
     * the lockscreen is up and the activity is resumed. Normally an activity will be transitioned
     * to the stopped state if it is started while the lockscreen is up, but with this flag set the
     * activity will remain in the resumed state visible on-top of the lock screen. This value can
     * be set as a manifest attribute using {@link android.R.attr#showWhenLocked}.
     *
     * @param showWhenLocked {@code true} to show the {@link Activity} on top of the lock screen;
     *                                   {@code false} otherwise.
     * @see #setTurnScreenOn(boolean)
     * @see android.R.attr#turnScreenOn
     * @see android.R.attr#showWhenLocked
     */
    public void setShowWhenLocked(boolean showWhenLocked) {
        ActivityClient.getInstance().setShowWhenLocked(mToken, showWhenLocked);
    }

使用方式有两种,可以通过代码调用:

setShowWhenLocked(true); // 允许在锁屏时显示

或者直接在manifest清单文件声明, 在 Activity 的标签中添加:

<activity
        android:name=".MainActivity"
        android:showWhenLocked="true">

2、showOnLockScreen*

与 showWhenLocked 类似,但主要用于更老的 API 版本,从 Android 4.2(API 17)开始支持。官方在 API 26(Android 8.0)起将其标记为 deprecated,文档推荐改用 android:showForAllUsers 并在运行时调用 setShowWhenLocked(true)。

仅能通过在清单文件中声明使用:

<activity
        android:name=".MainActivity"
        android:showOnLockScreen="true">

在新版 Android 中,showOnLockScreen的行为和 showWhenLocked 基本一致。,但在 Android 8.1 及以后推荐使用 showWhenLocked。如果同时设置了 showWhenLocked="true" 和 showOnLockScreen="true",系统会优先使用 showWhenLocked(因为它是新版的替代方案)。

另外值得注意的是需要配合 FLAG_TURN_SCREEN_ON(点亮屏幕)和 FLAG_DISMISS_KEYGUARD(解锁设备)等标志才能完整实现“绕过锁屏”的功能,

window.addFlags(
        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    )

参考Android中屏幕常亮的方法一文。

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w