4

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

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

市场上有一些应用程序可以做类似的事情(即 AutoLock 或 TogglePattern),所以必须有解决方案。

我知道我可以使用以下方法完全防止锁定:

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

或者

KeyguardLock.disableKeyguard()

但这不是我所追求的。

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

你有什么建议吗?

4

2 回答 2

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 开始,它已切换到新的清洁窗口标志。闹钟等也是如此。

于 2010-02-04T08:49:44.277 回答
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);
}

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

于 2010-02-04T05:08:39.450 回答