锁屏上显示Activity

在Android中,有些比较强的提醒,需要用户紧急处理的内容。需要唤醒屏幕,甚至在锁定屏幕的情况下,也要显示出来。例如,来电界面和闹钟提醒界面。这是怎样实现的呢?

其实,实现起来非常简单。只要给Activity的Window添加如下属性即可:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    ...
}

注意这里的FLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON,从名字上就能看出其作用。FLAG_TURN_SCREEN_ON使Activity启动的时候能够点亮屏幕。FLAG_SHOW_WHEN_LOCKED能够在屏幕锁定的时候,也能显示。

关于FLAG_SHOW_WHEN_LOCKED这个flag,官方文档说明如下:

Window flag: special flag to let windows be shown when the screen is locked. This will let application windows take precedence over key guard or any other lock screens. Can be used with FLAG_KEEP_SCREEN_ON to turn screen on and display windows directly before showing the key guard window. Can be used with FLAG_DISMISS_KEYGUARD to automatically fully dismisss non-secure keyguards. This flag only applies to the top-most full-screen window.

这段话的大概意思是,这个Flag能够让windown在锁屏的时候,在锁屏之上显示。可以配合FLAG_KEEP_SCREEN_ON(保持屏幕常亮)和FLAG_DISMISS_KEYGUARD(解锁屏幕)等Flag使用。需要特别注意的是最后一句话,意思就是这个flag只有是全屏幕的window才起作用。例如,对你的Activity使用了Dialog的Theme,如下:

<activity android:theme="@android:style/Theme.Dialog" />

这时,你的Activity将不能显示在锁屏之上。

另外,在锁屏上显示Activity,为了不让界面显得太突兀,你可能还想能够使用系统的屏保作为你的Activity背景,系统闹钟就是这么做的。要实现这样的功能也特别容易,只要把Activity的背景设为透明即可,例如你可以为你的Activity定义如下Theme:

<style name="FullScreenTheme" parent="@android:style/Theme.Light.NoTitle">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="miui:windowTranslucentStatus">transparentDark</item>
</style>

<activity android:theme="@style/FullScreenTheme" />

题外话,我们可以通过如下方法判断,系统是否处在锁屏状态:

KeyguardManager km =
    (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean showingLocked = km.inKeyguardRestrictedInputMode();
时间: 2024-11-09 18:29:40

锁屏上显示Activity的相关文章

解决android锁屏或解锁后activity重启的问题

If your target build version is Honeycomb 3.2 (API Level 13) or higher you must put the screenSize flag too, as in: <activity android:configChanges="orientation|screenSize|keyboardHidden" android:name="YOUR ACTIVITY NAME"> </a

【Android N 7.1.1】 锁屏之上显示Toast

package com.android.systemuirom.keyguard; import android.content.Context; import android.view.Gravity; import android.view.WindowManager; import android.widget.Toast; public class KeyguardToast { private static KeyguardToast sInstance; private Toast

锁屏显示Activity

在Android中,有些比较强的提醒,需要用户紧急处理的内容.需要唤醒屏幕,甚至在锁定屏幕的情况下,也要显示出来.例如,来电界面和闹钟提醒界面.这是怎样实现的呢? 其实,实现起来非常简单.只要给Activity的Window添加如下属性即可: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowMa

windows phone 8.1开发:锁屏提醒

原文出自:http://www.bcmeng.com/lockscreen/ 之前小梦和大家分享了toast通知,磁铁更新,今天小梦和大家分享windows phone 8.1开发中的锁屏提醒.相比toast通知和磁铁更新,锁屏提醒十分简单.锁屏提醒有俩种:数字提醒和字形提醒,在Windows Phone 8.1中,手机锁屏提醒仅支持“警报”和“注意”状态字形以及数字.向手机发送任何其他字形将清除锁屏提醒.其支持字形如下: 状态 字形 XML 无 未显示锁屏提醒 <badge value="

快速构建Windows 8风格应用33-构建锁屏提醒

原文:快速构建Windows 8风格应用33-构建锁屏提醒 引言 Windows Phone(8&7.5)和Windows 8引入了锁屏概念,其实做过Windows Phone 7.5应用开发者都知道7.5时代手机锁屏是不支持第三方开发者开发的.那么现在我们第三方开发者可以在Windows 8和Windows Phone 8的锁屏界面开发显示自己应用的信息了. Windows 8 锁屏具有三种用途: 防止触控设备上的意外登录尝试: 为用户提供个性化的界面: 向用户显示精简的信息:日期和时间.网络

Android5.1 - 锁屏界面时间显示

[问题]待机唤醒解锁界面时间显示不全.不论是8寸还是7寸的屏幕都有此问题.时间显示设置为“上午10:30”的时候,最右边的数字0残缺.而时间数字少于4个时,数字不会残缺. [debug]找到相关的配置文件,把文字的大小修改为合适的值即可.在frameworks/base/packages下有2个目录,分别是Keyguard和SystemUI. 查看SystemUI的Android.mk文件LOCAL_STATIC_JAVA_LIBRARIES := Keyguard android-suppor

Android Activity组件正常以及锁屏状态下的启动流程

前言: Activity是android的四大组件之一,它主要负责管理android应用程序的用户界面. 本文主要从framework的角度去分析activity的启动过程.activity的启动过程根据不同的情况会有一些差别,比如锁屏与非锁屏状态下的区别,activity依附的应用程序进程不存在与已经存在的区别等. 目录: 一.KK4.4从Launcher启动Activity的流程 二.应用内启动子Activity的流程 三.锁屏状态下Activity启动的流程 文章中含有大量的时序图,请直接

Android下屏幕锁屏弹窗的正确姿势

最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也有两种方法: a) 通过PowerManager的isScreenOn方法,代码如下: PowerManager pm = (P

android4.0 锁屏实现(转)

转载请表明出处:http://blog.csdn.net/wdaming1986/article/details/8837023 好了,言归正传,说说锁屏了,其实把锁屏做成apk的形式,会引起很多问题的,导致不必要的麻烦,就像市场上的流行的Go锁屏和91锁屏也是会有一些问题的,只是影响不大,最好的做法是修改源码,在源码中定制自己的锁屏,这样一劳永逸: 首先做锁屏考虑的事有以下四点: (1)替换掉系统的锁屏,不能让系统的锁屏显示出来:         (2)屏蔽掉Home键盘,back键,menu