我不想永久地绕过键盘锁,只是为了这一刻。例如当发出警报时(例如唤醒警报),我可以在解锁屏幕时解除/暂停它。我想要实现同样的行为。我想要开始一个应该在锁定屏幕上的对话框。我可以点击对话框上的按钮而不解锁。这可能吗?如果是的话怎么样?
我不想要以下内容:
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);
}
答案 0 :(得分:4)
这可能会有用。在FLAG_SHOW_WHEN_LOCKED
中实现窗口标记FLAG_TURN_SCREEN_ON
和public WindowManager.LayoutParams ()
,或者您可以使用KeyguardManager
类(在API 13中已弃用,但仍可使用)由
public KeyguardManager.KeyguardLock newKeyguardLock (String tag)
使用FLAG_DISMISS_KEYGUARD
和/或FLAG_SHOW_WHEN_LOCKED
代替;这允许您在应用程序移入和移出前台时无缝隐藏键盘锁,并且不需要请求任何特殊权限。使您可以锁定或解锁键盘。通过调用Context.getSystemService()
获取此类的实例。此类由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;