我想检查API级别为28+的Android设备支持哪些生物识别,以便能够向用户显示相关文本。例如。 “使用指纹登录”,“使用面部登录”,“使用虹膜登录”,“启用指纹登录”,“启用面部登录”等。
我正在使用BiometricManager.canAuthenticate()来确定是否可以使用生物识别。对于早于28的版本,BiometricManager
在内部使用FingerprintManagerCompat
,因此我知道如果结果为BIOMETRIC_SUCCESS
,则设备使用指纹。
有没有办法知道支持哪些生物识别技术-指纹,面部,虹膜?也许某些设备可以支持多个设备。
答案 0 :(得分:4)
只有具有API29的设备才能提供比指纹更多的生物识别选项。
通过检查android.hardware.biometrics.BiometricManager.hasBiometrics()
(API29),您可以了解如何检查可用的生物识别技术:
final PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
|| pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
|| pm.hasSystemFeature(PackageManager.FEATURE_FACE);
答案 1 :(得分:2)
BiometricManager
API的设计似乎使得调用应用程序必须与所使用的身份验证方法无关。这样一来,只要用户成功,用户的身份验证方式就不会有所不同(随之而来的是在卖方https://source.android.com/security/biometric上进行强身份验证的要求)。
结果是不好的事情:您不能拥有与身份验证方法匹配的标题,因此您应该提出诸如“ 请授权操作”之类的通用名称。好消息是,已经根据支持的身份验证方法显示了对话框提示(例如,对于指纹身份验证,UI会在匹配的图标上显示文本“触摸指纹传感器”)。这是由平台完成的,不能由调用应用程序控制。
部分解决方案:您可以使用(现已弃用)API https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager
专门检查指纹认证的可用性答案 2 :(得分:1)
似乎无法找出在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中使用“使用面部登录”。如果仅支持指纹功能,则可以使用“使用指纹登录”等。
如果它支持多种生物识别方法,则必须使用一些通用文本,例如“生物识别登录”。
答案 3 :(得分:1)
The official recommendation是您使用AndroidX Biometric Library。它带有一个标准的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()
}
}
您应该使用生物特征支持库的原因:
答案 4 :(得分:0)
使用PackageManager
可以检查支持哪些生物识别。 Here是一篇有关如何处理显示用户可理解的字符串的文章。