9

BiometricPrompt在我的应用程序中使用。authenticate()它运行良好,并在调用该方法时显示对话框。但是当我在对话框外部单击时,此对话框会关闭。如何预防?如何使 BiometricPrompt 的对话框不可取消?这里没有像biometricPrompt.setCancelable(false).

4

4 回答 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 回答
-3

您必须使用1.0.0-beta01或更高版本。

现在它是默认行为:
触摸外部不再取消身份验证。后退按钮仍然取消身份验证。

您可以看到更改日志:

将行为更改为不允许BiometricPrompt被提示之外的触摸事件取消。

您还可以查看rewiw 报告
没有新的 API。

于 2019-08-31T10:35:11.307 回答