从代码
我试图找到一种方法来临时禁用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);
}
你也许可以做到在你的代码类似的东西。
由于2.0(API级别5),您可以使用此窗口标志,以防止锁屏的显示,同时显示你的窗口:
您也可以使用此标志可允许显示你的窗口时,被解雇非安全键盘锁:
注意,这些不允许你绕过锁屏应用程序的环境下的外吨,这是一个有意的设计决定。
还有一个旧的API,允许您隐藏在一个类似的方式锁定屏幕唤醒锁定:
使用此API是在新平台上气馁,因为它很容易导致错误并导致不良行为(当用户期望它时屏幕没有锁定),并且基本上不可能在具有解锁状态的活动之间进行干净的转换。例如,这是调用屏幕最初用于在显示时隐藏锁定屏幕的API,但从2.0开始,它已切换到新的清洁器窗口标志。同样的闹钟等
谢谢hackbod。 当然,你是绝对正确的,但绕过提供的API总是一个坏主意。但在这种情况下,我仍然没有别的办法。我打算开发的是一个后台服务,临时禁用LockPattern并在一段时间后重新启用它(可能是10分钟)。所以没有显示“我的窗户”......因此,我不能使用“LayoutParams”。此外,使用服务中的KeyguardManager来防止模式看起来并不理想。 – 2010-02-04 10:32:35
为什么它看起来不理想?这就是API的功能。它比用户喜欢是否使用锁定模式好得多,无论如何,如果您确实弄乱了用户的偏好,应该预先警告您的应用将在未来版本的平台中突破,因为将引入更强大的企业支持。 – hackbod 2010-02-04 20:27:24
再次感谢hackrod。正如我上面提到的,我已经“玩”了“KeyguardLock.disableKeyguard()”,它似乎完全禁用了锁屏。但这不是我要找的。 “exitKeyguardSecurely()”看起来(没有测试)也只有有趣的,如果我想向用户显示信息...但我计划一个后台服务应该在后台默默运行... 我忽略了一些东西? – 2010-02-05 05:54:38
感谢您的回答。 我不知道为什么我没有在昨天让我的自我成为逻辑上的下一步......我想我们时常会需要某个“推动”我们朝正确方向发展的人。;) 除了你的帖子的代码之外,我还需要做的事情是初始化“mContentResolver”,当然还要为我的清单添加“android.permission.WRITE_SETTINGS”特权。 再次感谢您的“推”;) – 2010-02-04 07:11:55
我强烈建议您不要玩这些技巧。将来,您可能无法修改这些设置(它们将被移至安全设置),例如,如果Exchange帐户要求用户拥有密码,则应用程序不应该能够绕过此要求。 – hackbod 2010-02-04 08:41:51
我同意这可能不是最好的做法,但我不是在这里评判,我只是试图提供一个可能的答案。 – Malachi 2010-02-05 05:02:44