我在我的应用程序中使用BiometricPrompt
。当调用authenticate()
方法时,它能够正常工作并显示对话框。但是当我点击对话框外部时,该对话框会关闭。如何防止这种情况发生?如何使BiometricPrompt
的对话框不可取消?这里没有像biometricPrompt.setCancelable(false)
这样的方法。
我在我的应用程序中使用BiometricPrompt
。当调用authenticate()
方法时,它能够正常工作并显示对话框。但是当我点击对话框外部时,该对话框会关闭。如何防止这种情况发生?如何使BiometricPrompt
的对话框不可取消?这里没有像biometricPrompt.setCancelable(false)
这样的方法。
BiometricPrompt
不允许这样做。因此,您无法使系统提供的生物识别提示无法取消。但是,您可以检测用户何时取消对话框。
因此,一种选择是在用户取消后再次显示生物识别提示(我认为这会是糟糕的用户体验),或者使用替代的用户身份验证方式:
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
if (errorCode == BiometricConstants.ERROR_USER_CANCELED) {
// User canceled the operation
// you can either show the dialog again here
// or use alternate authentication (e.g. a password) - recommended way
}
}
看一下吧
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
supportFragmentManager.fragments.forEach {
if(it is DialogFragment) {
it.dialog?.setCanceledOnTouchOutside(false)
}
}
}
仍然有一些设备存在这个问题。一个解决方法是获取根视图并添加一个点击方法设置为false的叠加视图。
ViewGroup viewGroup = ((ViewGroup) yourActivity.findViewById(android.R.id.content)).getChildAt(0);
//create your view
Display display = mActivity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
View view = new View(yourActivity);
view.setId(R.id.overlay_view);
view.setLayoutParams(new ViewGroup.LayoutParams(size.x, size.y));
view.setBackgroundColor(ContextCompat.getColor(yourActivity, R.color.black));
view.setOnClickListener(v -> {
//do nothing prevent click under this overlay
});
//add your view on top of the screen
viewGroup.addView(view);
//call your biometric dialog
....
//on callbacks even if it is error or success call remove view
viewGroup.removeView(view);
setCanceledOnTouchOutside(false)
吗? - Mehul Solanki