如何在锁定屏幕上显示对话框,如viber或Line messenger

时间:2014-09-02 05:34:13

标签: android dialog wakelock screen-lock

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

  1. 广播接收器启动服务并获取WakeLock

    电源管理器         经理=(电源管理器)context.getSystemService(Context.POWER_SERVICE);         lockStatic = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,                 LOCK_NAME_STATIC);

  2. 服务以下列设置启动活动

    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. 活动启动 DialogFragment

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

    修改

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

2 个答案:

答案 0 :(得分:1)

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

我将活动主题更改为

后,这些标志对我有效
Theme.Holo.Light.NoActionBar.Fullscreen

答案 1 :(得分:0)

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

    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.