我在应用程序中使用BiometricPrompt
。调用authenticate()
方法时,它可以很好地工作并显示对话框。但是,当我在对话框外部单击时,此对话框将关闭。怎么预防呢?如何使BiometricPrompt的对话框不可取消?这里没有像biometricPrompt.setCancelable(false)
这样的方法。
答案 0 :(得分:1)
您必须使用版本1.0.0-beta01 或更高版本。
现在是默认行为:
外部触摸不再取消身份验证。后退按钮仍会取消身份验证。
您可以看到changelog:
更改了行为,不允许提示外的触摸事件取消
BiometricPrompt
。
您还可以检查rewiew report。
没有新的API。
答案 1 :(得分:0)
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
}
}
答案 2 :(得分:0)
签出
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
supportFragmentManager.fragments.forEach {
if(it is DialogFragment) {
it.dialog?.setCanceledOnTouchOutside(false)
}
}
}
答案 3 :(得分:0)
有些设备仍然存在此问题。一种解决方法是获取根视图并添加一个将clickable方法设置为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);