【问题标题】:"fingerprintManager!!.isHardwareDetected" always return true“fingerprintManager !!.isHardwareDetected”总是返回 true
【发布时间】:2019-08-28 05:04:02
【问题描述】:
我想知道,我的应用运行的设备是否支持指纹。
但是
if(!fingerprintManager!!.isHardwareDetected)
{
Toast.makeText(context,"Your device doesn't support fingerprint authentication", Toast.LENGTH_SHORT).show()
}
对于任何设备总是返回 true。
【问题讨论】:
标签:
android
kotlin
android-fingerprint-api
android-biometric
【解决方案1】:
确保您正在使用
<uses-permission android:name=" android.permission.USE_BIOMETRIC" />
还有
if(ActivityCompat.checkSelfPermission(AppContext, Manifest.permission.USE_BIOMETRIC) == PackageManager.PERMISSION_GRANTED)
{ if (!fingerprintManager!!.isHardwareDetected)
{ //permission granted but no hardware present
} else {
//permission granted and hardware present
} else {
// Permission not granted }
【解决方案2】:
您应该从使用 FingerprintManager 迁移到 BiometricPrompt。有a blog that shows just how to do so。
与FingerprintManager API 不同,您可以通过一个方法调用BiometricManager.from(context).canAuthenticate() 来检查设备是否支持生物特征验证。这个单一的方法调用检查设备上是否有可用的生物识别硬件、用户是否注册了模板以及用户是否启用了生物识别身份验证。如果这三个都不正确,则无法显示生物特征提示。这是一种非常方便的方法,可以为您处理所有复杂问题。
// Callback for the "authenticate" button in your app's UI.
override fun onClick(view: View) {
val promptInfo = createPromptInfo()
if (BiometricManager.from(context)
.canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
biometricPrompt.authenticate(promptInfo, cryptoObject)
} else {
loginWithPassword()
}
}