生物识别提示在一段时间后消失或关闭



我正在我的Android应用程序中使用新的BiometricPrompt,来自以下文学

implementation 'androidx.biometric:biometric:1.0.0-rc01'

我能够在加载活动时成功显示生物提示。

我的问题是,如果我将提示保持理想状态 30-60 秒,或者如果我将应用程序更改为后台,或者如果我在应用程序再次出现时显示提示时锁定并解锁屏幕 生物识别提示被关闭/不显示。我无法确定问题是否出在我的遗嘱执行人身上,请帮忙。下面是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Executor executor = Executors.newFixedThreadPool(2);
final BiometricPrompt biometricPrompt = new BiometricPrompt(this,
executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
}
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
navigateHome();
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
}
});
final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("Authenticate")
.setSubtitle("Unlock with your fingerprint")
.setNegativeButtonText("Cancel")
.build();
biometricPrompt.authenticate(promptInfo);
}

更新13/02/2019

我更新到

implementation 'androidx.biometric:biometric:1.0.1'

并更改了遗嘱执行器,如下所示

Executor executor = ContextCompat.getMainExecutor(this);

除了带有显示屏指纹扫描仪的一加设备(6T及以上型号)外,大多数问题现在都已解决。在提供不正确的手指扫描时(第一次),提示符正在调用onAuthenticationFailed() 而不是 onAuthenticationError(..)

如答案中所述,生物识别提示的故意行为不会在后台重新提示一次。

但是,有一个解决方法,在您的活动中使用窗口焦点已更改

@Override
public void onWindowFocusChanged(boolean hasFocus){
if(hasFocus){
biometricPromptFunction();
}
}

基本上,当应用程序从前台返回时,焦点是当前活动,它会启动生物识别提示。 请记住,即使它被取消或关闭,它也会继续提示。为了避免这种情况,您需要保留一个计数器,该计数器在窗口焦点更改时递增,并在 onResume 函数上重置。

这是根据设计。应用不应无限期地等待生物识别身份验证。超时时间长短可能因设备而异。

当发生超时时,我希望您收到一个调用onAuthenticationErrorBiometricConstants.BIOMETRIC_ERROR_TIMEOUT作为错误代码。

我不知道为什么谷歌选择不通过BiometricManager公开该常数。但是,对onAuthenticationError的任何调用都应被视为不可恢复的错误,并且身份验证已结束。

当任务堆栈切换(用户转到不同的应用程序或主屏幕)或设备进入键盘锁/屏幕关闭时,BiometricPrompt 会消失。不还原身份验证是有意的行为,因为用户可能会恢复应用并且已经忘记了上下文。

最新更新