How to start a dialog (like alarm dimiss /snooze) that can be clicked without unlocking the screen
Asked Answered
R

3

9

I dont want to permanently bypass keyguard, just for that moment .For example when a alarm is raised (eg wake up alarm) i can dismiss /snooze it whithout unlocking screen .I want to achive the same behaviour.I want start a dialog which should be on top on locked screen. I can click button on dialog without unlocking .Is this possible ?If yes how?

I dont want the following :

private void unlockScreen(Context context){
        Log.d("dialog", "unlocking screen now");
        PowerManager powermanager = ((PowerManager)context.getSystemService(Context.POWER_SERVICE));
        WakeLock wakeLock = powermanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        wakeLock.acquire();
        Window wind = DialogActivity.this.getWindow();
        wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);


    }
Reflex answered 25/7, 2013 at 18:51 Comment(1)
why is noone answering?Reflex
M
5

May be this will useful. Implement window flag FLAG_SHOW_WHEN_LOCKED along with FLAG_TURN_SCREEN_ON in public WindowManager.LayoutParams ()

or you can use KeyguardManager class( is deprecated in API 13, but still works) by

public KeyguardManager.KeyguardLock newKeyguardLock (String tag)

Use FLAG_DISMISS_KEYGUARD and/or FLAG_SHOW_WHEN_LOCKED instead; this allows you to seamlessly hide the keyguard as your application moves in and out of the foreground and does not require that any special permissions be requested. Enables you to lock or unlock the keyboard. Get an instance of this class by calling Context.getSystemService(). This class is wrapped by KeyguardManager.


WindowManager.LayoutParams


KeyguardManager


Hope you understand now, however feel free to ask if you need more detailed coding instructions for this problem
Cheers..

Mongoose answered 31/7, 2013 at 11:50 Comment(2)
KeyguardManager.KeyguardLock is deprecated in API 13 as per android doc. So I guess you should go forward with FLAG_SHOW_WHEN_LOCKED plus FLAG_TURN_SCREEN_ON if you want to turn on the device from sleep.Photographer
Yes, you are right. KeyguardManager.KeyguardLock is a depreciated method, I was just suggesting that there is a possibility to code in that way too (still works). And thanks for mentioning FLAG_TURN_SCREEN_ON I really forget about this one.Mongoose
K
0

you can add flags to current window, like this:

    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

if you don't want it permanent, just clear flags you added when you don't need them, use the method: clearFlags(flags).

Kurus answered 6/8, 2013 at 9:49 Comment(0)
C
-1

if your windows type is setted high enough . You can show your window above lock screen.

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

Chromaticity answered 1/8, 2013 at 11:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.