有沒有獲取設置 - >安全 - >屏幕鎖定當前設置的方法?它的設置可以是「無」,「幻燈片」,「PIN」等。我不想改變它,只知道當前的一個。以編程方式獲取Android中的「屏幕鎖定」設置
我只是對任何其他人說「沒有」感興趣,所以這也會起作用。我已經看到,API 23已添加DevicePolicyManager.setKeyguardDisabled()
。我正在尋找等效的getter,理想情況下是API 14以上。
有沒有獲取設置 - >安全 - >屏幕鎖定當前設置的方法?它的設置可以是「無」,「幻燈片」,「PIN」等。我不想改變它,只知道當前的一個。以編程方式獲取Android中的「屏幕鎖定」設置
我只是對任何其他人說「沒有」感興趣,所以這也會起作用。我已經看到,API 23已添加DevicePolicyManager.setKeyguardDisabled()
。我正在尋找等效的getter,理想情況下是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
}
}
謝謝。但是,我需要說明Slide和None之間的區別,並且KeyguardManager不允許它(它認爲兩者都不安全)。有一種查詢其他安全設置的方法(例如,這個問題:http://stackoverflow.com/a/17261469/2891462)。這個設置有類似的東西嗎? – user2891462