【问题标题】:USE_FINGERPRINT is deprecated in API level 28USE_FINGERPRINT 在 API 级别 28 中已弃用
【发布时间】:2018-12-24 19:33:18
【问题描述】:

常量USE_FINGERPRINTdeprecated in API level 28,我们应该使用更通用的USE_BIOMETRIC,它已添加到相同的 API 级别。

我在 Manifest 中交换了这些常量,但在调用 FingerprintManagerCompat.from(context).isHardwareDetected() 时出现错误。

错误是:

缺少必需的权限 - USE_FINGERPRINT

这是因为 28.0.0-rc3 支持 v4 库中的 FingerprintManagerCompat 中的 @RequiresPermission("android.permission.USE_FINGERPRINT") 注释。

我可以忽略这一点并继续使用新权限吗?

【问题讨论】:

  • 您是否在清单文件中添加了<uses-permission android:name="android.permission.USE_FINGERPRINT"/> 权限
  • @NileshRathod 不,正如我所写,我用新的 USE_BIOMETRIC 更改了它。
  • 我认为你必须使用BiometricPrompt 而不是使用FingerprintManagerCompat
  • 您找到解决方案了吗?这种变化会导致崩溃,至少应该小心一点。
  • 相关的谷歌跟踪器问题:issuetracker.google.com/issues/109826221 遗憾的是他们不会修复它:(

标签: android android-permissions android-appcompat android-9.0-pie


【解决方案1】:

我也遇到过同样的问题,简短的回答是忽略弃用,只要您希望在您的应用中支持指纹身份验证。

正如google dev blog 中所述,由于 API 28,google 提出了新的biometrics API,它简化了生物识别认证的整个过程。它们为 auth-dialog 提供了一个简单的构建器。此外,它们还支持面部和虹膜检测 - 恕我直言,如果您想支持它只是时间问题,并且可能值得升级它。

到目前为止,我发现的唯一缺点是,如果您想检查例如指纹硬件可用,您必须启动身份验证过程才能检查并等待error callback。已弃用的指纹 API 反而为此提供了 isHardwareDetected()hasEnrolledFingerprints() 之类的方法。在这种情况下,如果您依赖此信息,您可能必须重新设计您的应用程序。弃用这些方法的原因可能是它只支持指纹,因此升级它不是一个坏主意。

Google 还为 API 28 以下的设备提供了 compat 'androidx.biometric:biometric:1.0.0-alpha02' 版本,似乎通过导入此依赖项,您可以简单地切换到 USE_BIOMETRIC 权限,而无需修改您的任何其他内容应用程序 - 你不会再被警告所困扰。由于它仅处于 alpha 阶段,因此我会小心使用它。因此,只要您不使用生物识别 API 中的任何内容,当您想要支持其他生物识别身份验证方法时,您也可以简单地忽略该问题并再次面对它。

编辑:现在,compat 库的 beta 版本发布了,'androidx.biometric:biometric:1.0.0-beta01'。欲了解更多信息,请check here

现在,compat 库的稳定版本于 2019 年 12 月 18 日发布,'androidx.biometric:biometric:1.0.1'。有关此Click here 的更多信息。

【讨论】:

  • 这是我们在堆栈溢出时需要更多的高质量答案。 +100
  • @jungledev 在我的辩护中,SO 没有向我发送关于 Mathew11 对您的评论的回复的通知。我仅在 16/8 a 的新答案后才收到通知,然后我看到了这个答案和您的评论。 :-/
  • “1.0.0-beta02”现已上市,仍在等待最终版本。
【解决方案2】:

biometrics API 提供 BiometricConstants 用于错误处理

override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
    super.onAuthenticationError(errorCode, errString)

    //The device does not have a biometric sensor.
    if (errorCode == BiometricPrompt.ERROR_HW_NOT_PRESENT){
      //Do something
    }
}

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 2020-12-22
    • 2020-11-09
    • 2019-07-30
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多