2016-04-14 159 views
0

有沒有獲取設置 - >安全 - >屏幕鎖定當前設置的方法?它的設置可以是「無」,「幻燈片」,「PIN」等。我不想改變它,只知道當前的一個。以編程方式獲取Android中的「屏幕鎖定」設置

我只是對任何其他人說「沒有」感興趣,所以這也會起作用。我已經看到,API 23已添加DevicePolicyManager.setKeyguardDisabled()。我正在尋找等效的getter,理想情況下是API 14以上。

回答

0

經過幾天的研究,我得出了這樣的結論:沒有辦法做到這一點。 KeyguardManager方法無法區分NoneSlide之間的區別。從Android設置中無法查詢。

唯一的辦法是手動監視Keyguard當屏幕關閉,並假設在30分鐘後,如果它沒有顯示它是因爲None設置。這顯然不是一個好主意,但Android似乎決定不提供有關其鎖定偏好的更多信息。

0

DevicePolicyManager不是你正在尋找的東西。 DevicePolicyManager適用於想要使用設備管理的應用程序。

使用KeyguardManager來確定啓用了哪種設備鎖定以及設備是否當前被鎖定。

+0

謝謝。但是,我需要說明Slide和None之間的區別,並且KeyguardManager不允許它(它認爲兩者都不安全)。有一種查詢其他安全設置的方​​法(例如,這個問題:http://stackoverflow.com/a/17261469/2891462)。這個設置有類似的東西嗎? – user2891462

0

我在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 
    } 
} 
相關問題