我正在使用此权限
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
检查设备是否有指纹。那就是我如何在Kotlin中对其进行检查
val fingerSensorManager = FingerSensorManager(this)
fingerSensorManager.isFingerPrintAvailable()
它工作正常,但在Android 8 and above
中会引发异常。
如何检查指纹并在所有版本中使用它?我知道还有另一种适用于Android 8及更高版本的方法,但令我感到困惑的是如何实现该方法,以便它可在所有设备上正常工作
答案 0 :(得分:2)
简单的新androidX库
BiometricManager.from(activity).canAuthenticate()
如文档所述
如果用户没有注册,则返回BIOMETRIC_ERROR_NONE_ENROLLED;如果当前不支持/启用任何返回,则返回BIOMETRIC_ERROR_HW_UNAVAILABLE。 如果当前可以使用生物特征(已注册并可用),则返回BIOMETRIC_SUCCESS。值为BIOMETRIC_SUCCESS,BIOMETRIC_ERROR_HW_UNAVAILABLE,BIOMETRIC_ERROR_NONE_ENROLLED或BIOMETRIC_ERROR_NO_HARDWARE
答案 1 :(得分:1)
最新的API 28
AndroidManifest.xml
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
现在,您可以使用:
val executor = activity.mainExecutor
val cancelListener = DialogInterface.OnClickListener { _, _ -> })
val biometricPrompt = BiometricPrompt.Builder(context)
.setTitle("Title")
.setSubtitle("Subtitle")
.setDescription("Description")
.setNegativeButton("Cancel", executor, cancelListener)
.build()
下一个代码的版本低于API 28
该类在API级别28中已弃用。请参见BiometricPrompt 在启动身份验证时显示系统提供的对话框。在一个 设备可能具有不同类型的生物特征的世界 身份验证,由系统提供更为现实 身份验证对话框,因为方法可能因供应商/设备而异。
我建议您阅读此主题:
How to add fingerprint authentication to your Android app
另外,请遵循此其他线程:
How to check device compatibility for finger print authentication in android
您必须将依赖项添加到“ gradle”文件中
compile "com.android.support:support-v4:23.0.0"
基本上,如果我正确理解了您的问题,则想知道设备是否具有指纹硬件和功能。然后,您可以使用:
// 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
}
}
不要忘记添加权限以访问AndroidManifest中的指纹功能。从API 28开始:
<uses-permission android:name=" android.permission.USE_BIOMETRIC" />
在API28之前:
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
希望它能对您有所帮助。
答案 2 :(得分:0)
您可以使用Androidx中的biometric lib。它仍然处于Alpha状态,但到目前为止运行良好。好处是,对于特定的Android API级别,您不需要两种实现。
fun isAvailable(context: Context): Boolean {
val fingerprintManager = FingerprintManagerCompat.from(context)
return fingerprintManager.isHardwareDetected && fingerprintManager.hasEnrolledFingerprints()
}