我需要显示一个对话框,无论用户屏幕被锁定还是深度睡眠,都会显示该对话框。我目前的情况是:
广播接收器启动服务并获取WakeLock
电源管理器 经理=(电源管理器)context.getSystemService(Context.POWER_SERVICE); lockStatic = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_NAME_STATIC);
服务以下列设置启动活动
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);
活动启动 DialogFragment
问题是如果屏幕被锁定或处于睡眠状态,则不会出现对话框。即使屏幕关闭或锁定,Viber应用程序和Line Messenger应用程序中的消息对话框也会弹出。他们是怎么做到的?
修改
我发现当活动主题设置为 Theme.Holo.Light.NoActionBar.Fullscreen 或任何FULLSCREEN主题时,它可以正常工作。 :)
答案 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.