I am using this permission
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
to check if device has fingerprint or not. Thats how I check it in kotlin
val fingerSensorManager = FingerSensorManager(this)
fingerSensorManager.isFingerPrintAvailable()
It works fine but in Android 8 and above
it throws exception.
How can I check fingerprint and also use it in all versions? I know there is another method for Android 8 and above but I am confuse that how to implement it so that it works in every device
NEWEST FOR API 28
AndroidManifest.xml
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
Now, you're able to use:
val executor = activity.mainExecutor
val cancelListener = DialogInterface.OnClickListener { _, _ -> })
val biometricPrompt = BiometricPrompt.Builder(context)
.setTitle("Title")
.setSubtitle("Subtitle")
.setDescription("Description")
.setNegativeButton("Cancel", executor, cancelListener)
.build()
THE NEXT CODE IS FOR VERSION LOWER THAN API 28
This class was deprecated in API level 28. See BiometricPrompt which shows a system-provided dialog upon starting authentication. In a world where devices may have different types of biometric authentication, it's much more realistic to have a system-provided authentication dialog since the method may vary by vendor/device.
I recommend you read this thread:
How to add fingerprint authentication to your Android app
Also, follow this other thread:
How to check device compatibility for finger print authentication in android
You have to add the dependency to your ´gradle´ file
compile "com.android.support:support-v4:23.0.0"
Basically, if I understood correctly your question, you want to know if the device has the fingerprint hardware and features. Then you might use:
// Check if we're running on Android 6.0 (M) or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//Fingerprint API only available on from Android 6.0 (M)
FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
if (!fingerprintManager.isHardwareDetected()) {
// Device doesn't support fingerprint authentication
} else if (!fingerprintManager.hasEnrolledFingerprints()) {
// User hasn't enrolled any fingerprints to authenticate with
} else {
// Everything is ready for fingerprint authentication
}
}
Don't forget to add permission to access fingerprint functions in AndroidManifest. Since API 28:
<uses-permission android:name=" android.permission.USE_BIOMETRIC" />
Before API28:
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
Hope it help you.
o new androidX library it simple
BiometricManager.from(activity).canAuthenticate()
as documetation says
Returns BIOMETRIC_ERROR_NONE_ENROLLED if the user does not have any enrolled, or BIOMETRIC_ERROR_HW_UNAVAILABLE if none are currently supported/enabled. Returns BIOMETRIC_SUCCESS if a biometric can currently be used (enrolled and available). Value is BIOMETRIC_SUCCESS, BIOMETRIC_ERROR_HW_UNAVAILABLE, BIOMETRIC_ERROR_NONE_ENROLLED, or BIOMETRIC_ERROR_NO_HARDWARE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With