私は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
}
}
ありがとうございました。しかし、私はSlideとNoneの違いを伝える必要があり、KeyguardManagerはそれを許可しません(両方とも安全でないと考えています)。他のセキュリティ設定を照会する方法があります(たとえば、この質問:http://stackoverflow.com/a/17261469/2891462)。この設定に似たものはありますか? – user2891462