showWhenLocked 和 showOnLockScreen的区别 四大组件

Quibbler 2月前 224

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中屏幕常亮的方法一文。



不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com