如何在不解锁屏幕的情况下启动可以单击的对话框(如警报解除/暂停)

时间:2013-07-25 18:52:00

标签: android password-protection android-alarms

我不想永久地绕过键盘锁,只是为了这一刻。例如当发出警报时(例如唤醒警报),我可以在解锁屏幕时解除/暂停它。我想要实现同样的行为。我想要开始一个应该在锁定屏幕上的对话框。我可以点击对话框上的按钮而不解锁。这可能吗?如果是的话怎么样?

我不想要以下内容:

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


    }

3 个答案:

答案 0 :(得分:4)

这可能会有用。在FLAG_SHOW_WHEN_LOCKED中实现窗口标记FLAG_TURN_SCREEN_ONpublic WindowManager.LayoutParams (),或者您可以使用KeyguardManager类(在API 13中已弃用,但仍可使用)由

public KeyguardManager.KeyguardLock newKeyguardLock (String tag)

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


WindowManager.LayoutParams


KeyguardManager


希望您现在明白,但请随时询问您是否需要更详细的编码说明来解决此问题
干杯..

答案 1 :(得分: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(标志)。

答案 2 :(得分:-1)

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

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;