How to detect if PIN/password/pattern is required

2019-02-03 05:27发布

问题:

How can I detect if the phone is locked by a password, pin or pattern?

thank you!

回答1:

Two methods

  1. Check programatically - API 16+

https://gist.github.com/doridori/54c32c66ef4f4e34300f

Note that you dont need to check for face unlock as that requires that a pin/pass fallback is set.

  1. Device Admin Policies

Can also look into the Device Admin Policies which allow restrictions on how the app is setup regarding security including pin/pass set restrictions

  • Device Administration
  • Enhancing Security with Device Management Policies

As an aside, these are the lock types you want to check for if using an encrypted Keystore. Check here for more info.



回答2:

You can use the Settings.Secure class to query information about the security in place on an android device. For example, to see if the user has a lock pattern enabled you'd do:

ContentResolver cr = getContentResolver();
int lockPatternEnable = 
  Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED);

lockPatternEnable would then have a 0 if it wasn't enabled and a 1 if it was enabled.



回答3:

This should be OK for Android API 16 and up, according to the documentation. I tested it on 19 and it seems to work.

private boolean IsDeviceSecured () {
    KeyguardManager keyguardManager =
            (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); //api 16+
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return keyguardManager.isDeviceSecure();
    }
    return keyguardManager.isKeyguardSecure ();
}