1

我需要显示一个对话框,无论用户屏幕锁定还是深度睡眠都显示。我目前的情况是:

  1. 广播接收者 发起服务并获取 WakeLock

    PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE); lockStatic=mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_NAME_STATIC);

  2. 服务使用以下设置启动Activity

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

  3. Activity启动一个DialogFragment

问题是如果屏幕被锁定或处于睡眠状态,则不会出现对话框。即使屏幕关闭或锁定,Viber 应用程序和 Line Messenger 应用程序中的消息对话框也会弹出。他们是怎么做到的?

编辑

好吧,我发现当活动主题设置为Theme.Holo.Light.NoActionBar.Fullscreen或 Any FULLSCREEN 主题时它可以工作。:)

4

2 回答 2

1
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

在我将活动主题更改为之后,这些标志对我有用

Theme.Holo.Light.NoActionBar.Fullscreen
于 2014-09-02T08:19:09.967 回答
0

您应该使用KeyGuardManager自动解锁设备,然后获取您的唤醒锁。

    KeyguardManager kgm = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
boolean isKeyguardUp = kgm.inKeyguardRestrictedInputMode();
KeyguardLock kgl = kgm.newKeyguardLock("Your Activity/Service name");

if(isKeyguardUp){
kgl.disableKeyguard();
isKeyguardUp = false;
}

wl.acquire(); //use your wake lock once keyguard is down.
于 2014-09-02T05:55:46.693 回答