Search code examples
androidbiometricsandroid-biometric

How to check what biometrics are supported on API level 28+?


I want to check what biometrics are supported on Android devices with API level 28+ to be able to to show relevant text to the users. E.g. "Log in with Fingerprint", "Login with Face", "Login with Iris", "Enable Fingerprint login", "Enable Face login", etc.

I am using BiometricManager.canAuthenticate() to determine if biometrics can be used. For versions older than 28 BiometricManager uses FingerprintManagerCompat internally so I know that if the result is BIOMETRIC_SUCCESS the device uses fingerprint.

Is there a way to know what biometrics are supported - fingerprint, face, iris? Maybe some devices can support more than one.


Solution

  • Only devices with API29 provide more biometric options than fingerprint.

    By checking the android.hardware.biometrics.BiometricManager.hasBiometrics() (API29) you can understand how to inspect what biometrics are available:

    final PackageManager pm = context.getPackageManager();
            return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
                    || pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
                    || pm.hasSystemFeature(PackageManager.FEATURE_FACE);