9

我不想永久绕过键盘锁,只是为了那一刻。例如,当警报响起时(例如唤醒警报),我可以在不解锁屏幕的情况下关闭/暂停它。我想实现相同的行为。我想启动一个对话框应该在锁定屏幕的顶部。我可以在不解锁的情况下单击对话框上的按钮。这可能吗?如果可以,如何?

我不想要以下内容:

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);


    }
4

3 回答 3

5

可能这会有用。FLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ONin一起实现窗口标志,public WindowManager.LayoutParams ()

或者您可以使用KeyguardManager类(在 API 13 中已弃用,但仍然有效)

public KeyguardManager.KeyguardLock newKeyguardLock (String tag)

使用FLAG_DISMISS_KEYGUARD和/或FLAG_SHOW_WHEN_LOCKED代替;这允许您在应用程序移入和移出前台时无缝隐藏键盘保护,并且不需要请求任何特殊权限。使您能够锁定或解锁键盘。通过调用获取此类的实例Context.getSystemService()。这个类由KeyguardManager.


WindowManager.LayoutParams


KeyguardManager


希望您现在理解,但是请随时询问您是否需要针对此问题的更详细的编码说明
Cheers..

于 2013-07-31T11:50:37.293 回答
0

您可以将标志添加到当前窗口,如下所示:

    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);

如果您不希望它永久存在,只需在不需要它们时清除添加的标志,请使用方法:clearFlags(flags)。

于 2013-08-06T09:49:36.973 回答
-1

如果您的 windows 类型设置得足够高。您可以在锁定屏幕上方显示您的窗口。

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

于 2013-08-01T11:40:41.473 回答