2013-07-05 85 views
2

我想使用一個android內部類com.android.internal.widget.LockPatternUtils。使用內部的Android類

我搜索的例子,我得到這個:

LockPatternUtils lpu = new LockPatternUtils(this.getContentResolver()); 

但是,我不能進口,autimport不會出現手動做

import com.android.internal.widget.LockPatternUtils 

不工作。

這是如何處理的?我覺得有一些關於創建一個接口,但不知道它

編輯:我得到這個:

boolean patternLocked = android.provider.Settings.System.getInt(
    getContentResolver(),Settings.System.LOCK_PATTERN_ENABLED, 0)==1; 

,對於圖案鎖定的作品,但我不能知道的PIN或密碼鎖定

回答

2

這是如何處理的?

這些類僅作爲完整固件版本的一部分提供,而不適用於Android SDK應用程序。

+0

電話服務類是內部太多,但也可以在第三方應用中訪問。這不是有這樣的解決方案嗎? – JesusS

+0

@JesusS:「Telephony類也是內部的,但可以在第三方應用程序中訪問」 - 不可靠。任何內部的東西都可以並且將會被設備製造商和ROM模塊修改(甚至刪除)。 – CommonsWare

6

使用反射來訪問內部的Android方法getActivePasswordQuality(線的LockPatternUtils.java 350),並比較在INT它返回到int作爲任何DevicePolicyManager Constants的:

protected boolean isSecure() { 

    String LOCK_PATTERN_UTILS = "com.android.internal.widget.LockPatternUtils"; 

    try { 
     Class<?> lockPatternUtilsClass = Class.forName(LOCK_PATTERN_UTILS); 
     Object lockPatternUtils = lockPatternUtilsClass.getConstructor(Context.class).newInstance(this); 
     Method method = lockPatternUtilsClass.getMethod("getActivePasswordQuality"); 
     int lockProtectionLevel = Integer.valueOf(String.valueOf(method.invoke(lockPatternUtils))); 

     // Then check if lockProtectionLevel == DevicePolicyManager.TheConstantForWhicheverLevelOfProtectionYouWantToEnforce, and return true if the check passes, false if it fails 
    } 
    catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return false; 
} 
+0

'getActivePasswordQuality'已在API'23'中更改,現在需要一個int參數(用戶標識)。有沒有辦法確定當前用戶的用戶名沒有MANAGE_USERS權限? – friederbluemle