我正在编写一个应用程序功能,以使用Biometric指纹认证API来认证用户。结合BiometricPrompt API可以正常工作。
通常会显示自己的UI对话框,因此可以在Android设备上进行统一。(Fingerprint Manager API的改进)
在一种设备测试方案中,我遇到了in-display(在屏幕上,例如Oneplus 6T设备)指纹支持,而不是背面生物识别硬件选项。
当我在其上运行应用程序时,在调用biometricPrompt.authenticate(..)
而不是对话框时,它将显示显示指纹认证选项。可以,并通过BiometricPrompt的内部API进行管理。
但是它会为开发人员管理带来一些不一致。
现在的问题是
编辑:我正在使用的代码参考:
import android.content.Context
import androidx.biometric.BiometricPrompt
import androidx.fragment.app.FragmentActivity
import java.lang.Exception
import java.util.concurrent.Executors
import javax.crypto.Cipher
class BiometricAuthenticationManager(private val context: Context) :
BiometricPrompt.AuthenticationCallback() {
private var biometricPrompt: BiometricPrompt? = null
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
biometricPrompt?.cancelAuthentication()
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
}
fun init(cipher: Cipher, promptInfo: BiometricPrompt.PromptInfo) {
if (context is FragmentActivity) {
val executor = Executors.newSingleThreadExecutor()
biometricPrompt = BiometricPrompt(context, executor, this)
biometricPrompt?.authenticate(promptInfo, BiometricPrompt.CryptoObject(cipher))
} else {
throw Exception(
"Check for FragmentActivity context.")
}
}
}
有关其外观的进一步参考,请找到以下附件。
我尝试检查锁定屏幕的相同情况,我猜想它使用了使用FingerPrintManager类和显示消息的自定义实现。
答案 0 :(得分:-1)
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
}
}
不要忘记添加
<uses-permission android:name=" android.permission.USE_BIOMETRIC" />