Android 如何检查API级别28+;支持哪些生物识别;?

Android 如何检查API级别28+;支持哪些生物识别;?,android,biometrics,android-biometric,Android,Biometrics,Android Biometric,我想检查API级别为28+的Android设备上支持哪些生物识别技术,以便能够向用户显示相关文本。例如“使用指纹登录”、“使用人脸登录”、“使用虹膜登录”、“启用指纹登录”、“启用人脸登录”等 我正在使用以确定是否可以使用生物识别技术。对于早于28的版本,BIOMETRIC Manager在内部使用指纹管理器Compat,因此我知道如果结果是生物识别成功,设备将使用指纹 有没有办法知道支持哪些生物特征识别技术?指纹、人脸、虹膜?可能有些设备可以支持多个。BiometricManagerAPI的设

我想检查API级别为28+的Android设备上支持哪些生物识别技术,以便能够向用户显示相关文本。例如“使用指纹登录”、“使用人脸登录”、“使用虹膜登录”、“启用指纹登录”、“启用人脸登录”等

我正在使用以确定是否可以使用生物识别技术。对于早于28的版本,BIOMETRIC Manager在内部使用指纹管理器Compat,因此我知道如果结果是生物识别成功,设备将使用指纹


有没有办法知道支持哪些生物特征识别技术?指纹、人脸、虹膜?可能有些设备可以支持多个。

BiometricManagerAPI的设计似乎是为了让调用应用程序必须与所使用的身份验证方法无关。因此,只要用户成功进行身份验证,用户的身份验证方式就不会有任何区别(同时,对供应商端的强身份验证也提出了要求)

因此,缺点是:您不能有与身份验证方法匹配的标题,因此您应该提出一些通用的方法,如“请授权操作”。好消息是,对话框提示已经按照支持的身份验证方法显示(例如,对于指纹身份验证,用户界面沿匹配图标显示文本“触摸指纹传感器”)。这是由平台完成的,不能由呼叫应用程序控制


部分解决方案:您可以使用(现已弃用)API专门检查指纹身份验证的可用性。只有使用API29的设备才能提供比指纹更多的生物识别选项

通过检查android.hardware.biometrics.biometrics Manager.hasBiometrics()(API29),您可以了解如何检查可用的生物特征:

final PackageManager pm = context.getPackageManager();
        return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
                || pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
                || pm.hasSystemFeature(PackageManager.FEATURE_FACE);

似乎不可能找出Android上使用的实际生物识别方法(与iOS不同)。但在Android 10上可以检测到受支持的生物识别方法:

PackageManager pm = context.getPackageManager();
boolean hasFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
boolean hasFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
boolean hasIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);
因此,如果手机只支持面部功能,您可以在GUI中使用“面部登录”。如果它只支持指纹功能,您可以使用“指纹登录”等

如果它支持多种生物识别方法,您将不得不使用一些通用文本,如“生物识别登录”。

就是您使用的。它附带了一个标准UI,可以为您处理形状因素。从本质上讲,它检测设备是否具有指纹或人脸身份验证的形式因素,并对其进行处理:作为开发人员,您不需要创建生物特征验证UI。要检查设备是否支持生物特征识别,您需要

override fun onClick(view: View) {  // user clicks to authenticate
   val promptInfo = createPromptInfo()
   if (BiometricManager.from(context)
               .canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
       biometricPrompt.authenticate(promptInfo, cryptoObject)
   } else {
       loginWithAppAccountPassword()
   }
}
您应该使用生物识别支持库的原因:

  • 开发人员不再需要在他们的代码中预期不同的API级别,因为库会在幕后处理所有API匹配。例如,支持库在API级别23至27上无缝使用FingerprintManager,在API级别28及更高级别上无缝使用BiometricPrompt
  • 开发人员不再需要创建自己的身份验证UI。该库提供了一个标准且熟悉的UI,该UI与用户的生物特征认证形式因素相匹配,例如指纹或人脸认证
  • 开发者可以通过单个方法调用检查设备是否支持生物特征认证

使用
PackageManager
可以检查支持哪些生物识别。是一篇建议如何处理显示用户可以理解的字符串的文章。

另请参阅这篇博文:我有一个场景。我使用的是生物识别api版本
1.2.0-alpha01
。我在
onAuthenticationError
中得到了否定按钮回调,我正在用
ERROR\u negative\u按钮检查它。那之后我该怎么办?我需要自己创建密码弹出窗口吗?因为系统没有处理它。@IsaidMier