Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从代码中启用或禁用PatternLock屏幕_Android_Design Patterns_Lockscreen - Fatal编程技术网

Android 从代码中启用或禁用PatternLock屏幕

Android 从代码中启用或禁用PatternLock屏幕,android,design-patterns,lockscreen,Android,Design Patterns,Lockscreen,我试图找到一种暂时禁用PatternLock屏幕的方法。我不希望锁被完全禁用,但是用户不需要一直重新输入他的模式 我的想法是编写一个服务,在一些用户活动后禁用该模式,并在一段时间后重新启用它。(甚至更多) 市场上有这样的应用程序(即AutoLock或TogglePattern),因此必须有一个解决方案 我知道我可以使用以下方法完全防止锁定: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 或 但那不是我想

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

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

市场上有这样的应用程序(即AutoLock或TogglePattern),因此必须有一个解决方案

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

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

但那不是我想要的

我在设置活动使用的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开始,它已切换到新的cleaner窗口标志。同样,对于闹钟等也一样。

谢谢您的回答。我不知道为什么我昨天没有把这一步作为我自己的下一步。。。我想我们时不时都需要有人“推动”我们朝着正确的方向前进除了您在中发布的代码之外,我还需要做的就是初始化“mContentResolver”,当然还要将“android.permission.WRITE\u SETTINGS”权限添加到我的清单中。再次感谢您的“推送”;)我强烈建议你不要玩这些把戏。将来您可能无法修改这些设置(它们将被移动到安全设置),因为,例如,如果Exchange帐户要求用户拥有密码,则应用程序不应绕过此要求。我同意这可能不是最好的做法,但我不是来判断,我只是想为这个问题提供一个可能的答案。在安卓2.2及以上版本上,这是行不通的。。。已将其移动到安全设置。当尝试设置时,您会收到以下警告:WARN/Settings(4432):Setting lock\u pattern\u autolock已从android.provider.Settings.System移动到android.provider.Settings.Secure,值不变。感谢hackbod。当然,您是绝对正确的,绕过提供的API总是一个坏主意。但在这种情况下,我仍然看不到其他办法。我计划开发的是一个后台服务,它临时禁用锁模式,并在一段时间后(可能10分钟)重新启用它。所以没有显示“我的窗口”。。。因此,我不能使用“LayoutParams”。另外,从服务中使用KeyguardManager来防止模式看起来并不理想。为什么看起来不理想?这就是API所做的。这远比搞乱用户是否使用锁模式的偏好要好得多;不管怎么说,如果你真的弄乱了用户的偏好,你会被预先警告,随着更强大的企业支持的引入,你的应用程序将在未来的平台版本中崩溃。再次感谢hackrod。如上所述,我已经“玩”过“KeyguardLock.disableKeyguard()”,它似乎完全禁用了锁屏。但这不是我要找的。“ExitKeyGuardSecure()”外观(无需测试)也只有在我想向用户显示信息时才有趣。。。但是我计划了一个后台服务,它应该在后台安静地运行。。。我忽略了什么吗?
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);
}