我BiometricPrompt
在我的应用程序中使用。authenticate()
它运行良好,并在调用该方法时显示对话框。但是当我在对话框外部单击时,此对话框会关闭。如何预防?如何使 BiometricPrompt 的对话框不可取消?这里没有像biometricPrompt.setCancelable(false)
.
问问题
4676 次
4 回答
3
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
}
}
于 2019-08-13T06:33:04.457 回答
0
一探究竟
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
supportFragmentManager.fragments.forEach {
if(it is DialogFragment) {
it.dialog?.setCanceledOnTouchOutside(false)
}
}
}
于 2019-08-30T02:04:14.973 回答
0
有些设备仍然存在此问题。一种解决方法是获取根视图并添加一个覆盖视图,并将可点击方法设置为 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);
于 2020-01-09T12:22:37.937 回答