2016-11-04 5 views
4

Ich muss überprüfen, ob der Lockscreen einen Pin oder etwas sicherer (Passwort, Fingerabdruck usw.) hat. Ich kann überprüfen, ob ein Pin, ein Passwort oder ein Muster vorhanden ist.Android überprüfen, ob Lockscreen eingestellt ist

Mein Problem ist, dass ich nicht erkennen kann, ob der Lockscreen ein Muster oder etwas niedriger ist. Ich habe das versucht:

aber es ist veraltet und wirft mir einen Fehler. Ich habe es auch versucht:

  long mode2 = Settings.Secure.getLong(contentResolver, "lockscreen.password_type"); 

aber dies endet mit einer SecurityException zu.

Gibt es eine Möglichkeit festzustellen, ob der Lockscreen einen Pin (oder höher) hat oder ein Lock-Muster oder etwas niedriger ist? Der KeyguardManager ist auf diese Weise nicht nützlich für mich:/

Jede Hilfe ist willkommen! Danke!

bearbeiten/

Der Fehler für die erste ist:

   Caused by: java.lang.SecurityException: Settings.Secure.lock_pattern_autolock is deprecated and no longer accessible. See API documentation for potential replacements. 

Die Ausnahme für die zweite ist: W/System.err: android.provider.Settings $ SettingNotFoundException: lockscreen.password_type

Der Fehler erscheint nur, wenn youre Geräte mit Eibisch oder höher verwenden (https://developer.android.com/reference/android/provider/Settings.Secure.html)

+0

Bitte posten Sie Ihre Ausnahmen! –

+0

Ich habe meinen Beitrag bearbeitet! – Lars

+0

@ user2701206 können Sie Hilfe zu diesem Thema geben? Ich stehe vor demselben Problem. viele TX! – estoke

Antwort

0

Sie zu Umset haben t pre und post Marshmallow-Funktionen, um dies zu überprüfen. Sie können Ihre Implementierungen zur Laufzeit auf Basis der SDK-Version wechseln.

+0

Wenn ich alles richtig verstehe, gibt es keine Möglichkeit, den Musterblock auf Post Marshmallow-Geräten zu erkennen. Sie können nur überprüfen, ob es einen Pin, ein Passwort oder ein Muster gibt, aber Sie können nicht nur nach dem Muster suchen. Oder liege ich falsch? – Lars

+0

Ja, das scheint der Fall zu sein. –

4

ich dies zu tun:

(von https://gist.github.com/doridori/54c32c66ef4f4e34300f inspiriert)
public boolean isDeviceScreenLocked() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     return isDeviceLocked(); 
    } else { 
     return isPatternSet() || isPassOrPinSet(); 
    } 
} 

/** 
* @return true if pattern set, false if not (or if an issue when checking) 
*/ 
private boolean isPatternSet() { 
    ContentResolver cr = context.getContentResolver(); 
    try { 
     int lockPatternEnable = Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED); 
     return lockPatternEnable == 1; 
    } catch (Settings.SettingNotFoundException e) { 
     return false; 
    } 
} 

/** 
* @return true if pass or pin set 
*/ 
private boolean isPassOrPinSet() { 
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 16+ 
    return keyguardManager.isKeyguardSecure(); 
} 

/** 
* @return true if pass or pin or pattern loacks screen 
*/ 
@TargetApi(23) 
private boolean isDeviceLocked() { 
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 23+ 
    return keyguardManager.isDeviceSecure(); 
} 
+0

Hi, ive endete mit nur einer Methode, die wie Ihr isPassOrPinSet() funktioniert. Afaik gibt es keine Möglichkeit, das Sperrmuster zu unterscheiden. – Lars