如何检查设备是否具有指纹功能,然后在Android中使用它

时间:2018-12-14 13:07:06

标签: android kotlin android-fingerprint-api

我正在使用此权限

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

检查设备是否有指纹。那就是我如何在Kotlin中对其进行检查

val fingerSensorManager = FingerSensorManager(this)
fingerSensorManager.isFingerPrintAvailable()

它工作正常,但在Android 8 and above中会引发异常。

如何检查指纹并在所有版本中使用它?我知道还有另一种适用于Android 8及更高版本的方法,但令我感到困惑的是如何实现该方法,以便它可在所有设备上正常工作

3 个答案:

答案 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()
}