首页 文章

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

提问于
浏览
1

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

  • Broadcast receiver 发起 Service 并获得WakeLock

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

  • Service 使用以下设置启动 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);

  • Activity 开始 DialogFragment

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

Edit

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

2 回答

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

    在我将Activity主题更改为之后,这些标志对我有效

    Theme.Holo.Light.NoActionBar.Fullscreen
    
  • 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.
    

相关问题