从代码启用或禁用PatternLock屏幕

时间:2010-02-03 14:42:19

标签: android design-patterns lockscreen

我试图找到暂时禁用PatternLock屏幕的方法。我不希望完全禁用锁,但用户不需要一直重新输入他的模式。

我的想法是编写一个服务,在一些用户活动后禁用该模式,并在一段时间后重新启用它。 (甚至更多)

市场上有些类似的东西(即AutoLock或TogglePattern),所以必须有一个解决方案。

我知道我可以通过以下方式完全阻止锁定:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

KeyguardLock.disableKeyguard()

但那不是我追求的目标。

我在设置活动使用的android源代码中看到了类com.android.internal.widget.LockPatternUtils,但是这个类不是(至少据我所知)可以通过“普通”应用程序访问。

你有什么建议吗?

2 个答案:

答案 0 :(得分:4)

从2.0(API级别5)开始,您可以使用此窗口标志来防止在显示窗口时显示锁定屏幕:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

您还可以使用此标志,以便在显示窗口时关闭非安全键盘锁:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD

请注意,这些不允许您绕过应用程序环境之外的锁定屏幕,这是一个有意的设计决定。

还有一个较旧的API可让您以类似于唤醒锁的方式隐藏锁定屏幕:

http://developer.android.com/reference/android/app/KeyguardManager.html#newKeyguardLock(java.lang.String)

在较新的平台上不鼓励使用此API,因为它很容易出错并导致不良行为(屏幕在用户期望时不会锁定),并且基本上不可能在已解锁的活动之间进行干净的转换状态。例如,这是调用屏幕最初用于在显示时隐藏锁定屏幕的API,但从2.0开始,它已切换到新的清除窗口标志。同样适用于闹钟等。

答案 1 :(得分:3)

您是否尝试查看com.android.internal.widget.LockPatternUtils的代码并执行其操作?

它有这样的东西:

public void setLockPatternEnabled(boolean enabled) {
    setBoolean(android.provider.Settings.System.LOCK_PATTERN_ENABLED, enabled);
}

private void setBoolean(String systemSettingKey, boolean enabled) {
    android.provider.Settings.System.putInt(
                    mContentResolver,
                    systemSettingKey,
                    enabled ? 1 : 0);
}

您可以在代码中执行类似操作。