How to detect if PIN/password/pattern is required to unlock phone?
Two methods
- 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.
- 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.
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.
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 ();
}