从代码

问题描述:

启用或禁用PatternLock屏幕

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

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

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

我知道我可以完全防止锁使用:

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

KeyguardLock.disableKeyguard() 

但是那不是我后。

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

你有什么建议吗?

您是否尝试过查看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); 
} 

你也许可以做到在你的代码类似的东西。

+0

感谢您的回答。 我不知道为什么我没有在昨天让我的自我成为逻辑上的下一步......我想我们时常会需要某个“推动”我们朝正确方向发展的人。;) 除了你的帖子的代码之外,我还需要做的事情是初始化“mContentResolver”,当然还要为我的清单添加“android.permission.WRITE_SETTINGS”特权。 再次感谢您的“推”;) – 2010-02-04 07:11:55

+0

我强烈建议您不要玩这些技巧。将来,您可能无法修改这些设置(它们将被移至安全设置),例如,如果Exchange帐户要求用户拥有密码,则应用程序不应该能够绕过此要求。 – hackbod 2010-02-04 08:41:51

+0

我同意这可能不是最好的做法,但我不是在这里评判,我只是试图提供一个可能的答案。 – Malachi 2010-02-05 05:02:44

由于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开始,它已切换到新的清洁器窗口标志。同样的闹钟等

+0

谢谢hackbod。 当然,你是绝对正确的,但绕过提供的API总是一个坏主意。但在这种情况下,我仍然没有别的办法。我打算开发的是一个后台服务,临时禁用LockPattern并在一段时间后重新启用它(可能是10分钟)。所以没有显示“我的窗户”......因此,我不能使用“LayoutParams”。此外,使用服务中的KeyguardManager来防止模式看起来并不理想。 – 2010-02-04 10:32:35

+0

为什么它看起来不理想?这就是API的功能。它比用户喜欢是否使用锁定模式好得多,无论如何,如果您确实弄乱了用户的偏好,应该预先警告您的应用将在未来版本的平台中突破,因为将引入更强大的企业支持。 – hackbod 2010-02-04 20:27:24

+0

再次感谢hackrod。正如我上面提到的,我已经“玩”了“KeyguardLock.disableKeyguard()”,它似乎完全禁用了锁屏。但这不是我要找的。 “exitKeyguardSecurely()”看起来(没有测试)也只有有趣的,如果我想向用户显示信息...但我计划一个后台服务应该在后台默默运行... 我忽略了一些东西? – 2010-02-05 05:54:38