以编程方式获取Android中的“屏幕锁定”设置

有没有办法获得当前设置的设置 – >安全 – >屏幕锁定? 这个设置可以是“无”,“幻灯片”,“PIN”等。我不想改变它,只是知道当前的一个。

我只是有兴趣从其他人那里告诉“无”,这样也可以。 我已经看到,对于API 23,他们添加了DevicePolicyManager.setKeyguardDisabled() 。 我正在寻找等效的getter,理想的API 14以上。

DevicePolicyManager不是你正在寻找的东西。 DevicePolicyManager适用于想要使用设备管理的应用程序。

使用KeyguardManager确定启用了哪种设备锁定以及设备是否当前被锁定。

经过几天的研究,我得出了这样的结论:没有办法做到这一点。 KeyguardManager方法无法区分“ None和“ Slide 。 从Android设置无法查询此方法。

唯一的办法是在屏幕关闭时手动监控Keyguard ,并假设在30分钟后,如果没有显示,则是因为None设置。 这显然不是一个好主意,但是Android似乎决定不给出有关其锁定偏好的更多信息。

我在LockPatternUtils类中find答案。 我写在kotlin我的代码,你可以轻松地转移到java代码。

 /** * 判断手机系统是否关闭了锁屏界面。 * 如果第三方 ROM 更改了 LockPatternUtil 或者 UserHandle 类,调用此方法可能会抛出exception。 */ fun isLockScreenDisabled(): Boolean { val lockPatternClass = Class.forName("com.android.internal.widget.LockPatternUtils") val lockPatternObject = lockPatternClass.getConstructor(Context::class.java) .newInstance(applicationContext) val isSecureMethod = lockPatternClass.getMethod("isLockScreenDisabled") var result = true try { result = isSecureMethod.invoke(lockPatternObject) as Boolean } catch (e: IllegalArgumentException) { val userHandleClass = Class.forName("android.os.UserHandle") val myUserIdMethod = userHandleClass.getMethod("myUserId") val userId = myUserIdMethod.invoke(userHandleClass) result = isSecureMethod.invoke(lockPatternClass, userId) as Boolean } return result } /** * 判断手机系统是否启用了密码锁。 * 在 4.1 系统以下的版本,如果系统 rom 更改了 LockPatternUtil 类可能会抛出exception。 */ fun isSecure(): Boolean { val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { keyguardManager.isKeyguardSecure } else { val lockPatternClass = Class.forName("com.android.internal.widget.LockPatternUtils") val lockPatternObject = lockPatternClass.getConstructor(Context::class.java) .newInstance(applicationContext) val isSecureMethod = lockPatternClass.getMethod("isSecure") var result = false try { result = isSecureMethod.invoke(lockPatternObject) as Boolean } catch (e: IllegalArgumentException) { val userHandleClass = Class.forName("android.os.UserHandle") val myUserIdMethod = userHandleClass.getMethod("myUserId") val userId = myUserIdMethod.invoke(userHandleClass) result = isSecureMethod.invoke(lockPatternClass, userId) as Boolean } result } }