有没有办法获取设置->安全->屏幕锁定的当前设置?是可以是“无”、“幻灯片”、“PIN”等的设置。我没兴趣改,只知道当前的那个。
我只对告诉其他任何人“无”感兴趣,所以这也可以。我已经看到他们为 API 23 添加了DevicePolicyManager.setKeyguardDisabled()
. 我正在寻找等效的吸气剂,理想情况下适用于 API 14 及更高版本。
有没有办法获取设置->安全->屏幕锁定的当前设置?是可以是“无”、“幻灯片”、“PIN”等的设置。我没兴趣改,只知道当前的那个。
我只对告诉其他任何人“无”感兴趣,所以这也可以。我已经看到他们为 API 23 添加了DevicePolicyManager.setKeyguardDisabled()
. 我正在寻找等效的吸气剂,理想情况下适用于 API 14 及更高版本。
经过几天的研究,我得出的结论是没有办法做到这一点。KeyguardManager
方法无法区分None
和Slide
。也无法从 Android 设置中查询。
唯一的方法是手动监控Keyguard
屏幕何时熄灭,并假设 30 分钟后,如果它没有出现,那是因为None
已设置。这显然不是一个好主意,但 Android 似乎决定不提供有关其锁定偏好的太多信息。
DevicePolicyManager
不是你要找的东西。DevicePolicyManager
适用于想要使用设备管理的应用程序。
用于KeyguardManager
确定启用了哪种设备锁定以及设备当前是否被锁定。
我在 LockPatternUtils 类中找到了答案。我用 kotlin 编写代码,您可以轻松转换为 java 代码。
/**
* 判断手机系统是否关闭了锁屏界面。
* 如果第三方 ROM 更改了 LockPatternUtil 或者 UserHandle 类,调用此方法可能会抛出异常。
*/
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 类可能会抛出异常。
*/
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
}
}