Я использую BiometricPrompt
в своем приложении. Он работает хорошо и показывает диалог при вызове метода authenticate()
. Но это диалоговое окно закрывается, когда я нажимаю за пределами диалогового окна. Как это предотвратить? Как сделать диалог BiometricPrompt неотменяемым? Здесь нет такого метода, как biometricPrompt.setCancelable(false)
.
Как сделать BiometricPrompt неотменяемым?
Ответы (4)
Вы должны использовать версию 1.0.0-beta01 или более позднюю.
Теперь это поведение по умолчанию:
Прикосновения снаружи больше не отменяют аутентификацию. Кнопка "Назад" все еще отменяет аутентификацию.
Вы можете просмотреть журнал изменений:
Изменено поведение, чтобы запретить отмену
BiometricPrompt
событием касания за пределами подсказки.
Вы также можете ознакомиться с отчетом о проверке.< br> Нового API нет.
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)
? - person Mehul Solanki   schedule 06.06.2019