首页 > 解决方案 > 如何检查设备是否具有指纹功能,然后在 Android 中使用

问题描述

我正在使用此权限

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

检查设备是否有指纹。这就是我在kotlin中检查它的方式

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

它工作正常,但Android 8 and above它抛出异常。

如何检查指纹并在所有版本中使用它?我知道还有另一种适用于 Android 8 及更高版本的方法,但我很困惑如何实现它以使其适用于每台设备

标签: androidkotlinandroid-fingerprint-api

解决方案


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 ,它在启动身份验证时显示系统提供的对话框。在设备可能具有不同类型的生物特征身份验证的世界中,拥有系统提供的身份验证对话框更为现实,因为该方法可能因供应商/设备而异。

我建议你阅读这个线程:

如何将指纹验证添加到您的 Android 应用程序

另外,请关注另一个线程:

如何在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" />

希望对您有所帮助。


推荐阅读