如何在屏幕锁定时显示活动?

问题描述:

我的应用程序在汽车停靠事件上启动,我想唤醒手机(由系统完成)并在我插入设备时解锁屏幕。 它是否可行?如何在屏幕锁定时显示活动?

+1

我希望不是,我不想让我的手机解锁ytime! (我可以拨错...) – 2010-09-25 10:47:32

+2

我很想编辑这个“如何显示我的活动,当屏幕被锁定”,因为你不能在设备上以编程方式“解锁”设备... ... – StrikeForceZero 2013-03-13 18:54:33

+2

确实正如SrikeForceZero解释的那样,您不能以编程方式“解锁”设备。下面的答案似乎表明你可以真正做的是展示如何在设备整体保持锁定的情况下制作特定的Activity * interactive * **。 – 2013-12-11 16:55:10

使用Activity.getWindow()来获取活动的窗口;使用Window.addFlags()添加在任何一个的WindowManager.LayoutParams以下标志,你的愿望的:FLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON

这是标准的汽车码头(和书桌码头)应用程序如何实现这种行为。

+0

很酷的作品,但这些标志只适用于sdk版本5和更高:( – mishkin 2010-12-12 05:03:05

+2

发现通用的方法,请参阅我的答案在这里http://*.com/questions/3621599/wake-android-device-up/4541982#4541982 – mishkin 2010-12-27 21:33:47

+0

似乎无法得到这个工作在ICS – 2012-02-24 07:32:07

我使用了正在增加活动到*

private Window wind; 
    @Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    /******block is needed to raise the application if the lock is*********/ 
    wind = this.getWindow(); 
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    /* ^^^^^^^block is needed to raise the application if the lock is*/ 
} 
+0

谢谢。即使将它放在OnCreate上,也可以完美地工作。 – Cerin 2012-07-18 01:21:06

+0

这将工作在AlertDialog? – user1762507 2013-04-08 23:59:54

+0

我不知道。请测试此方法并告诉我们! – 2013-06-03 12:56:23

你将能够使用FLAG_DISMISS_KEYGUARD仅适用于不具备安全锁启用像图案锁定手机。

FLAG_SHOW_WHEN_LOCKED只会将您当前的活动放在最上面,如果用户试图移动到别处,他将不得不解锁屏幕。

或者,你可以在你的清单中添加权限:对

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 

而且,在您的活动创造:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock lock = manager.newKeyguardLock("abc"); 
lock.disableKeyguard(); 
+2

弃用的方法 – user1940676 2014-02-02 15:56:37

使用锁的图案或输入PIN码,我需要添加以下也是因为屏幕在5秒内关闭:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);