Я брал код с официального сайта:
https://developer.android.com/training/sign-in/bio....
Ниже мой код, но он почти полностью копирует данный на сайте.
BiometricManager biometricManager = BiometricManager.from(getActivity().getApplicationContext());
switch (biometricManager.canAuthenticate()) {
case BiometricManager.BIOMETRIC_SUCCESS:
// TODO: функция если всё ок
Toast.makeText(getActivity().getApplicationContext(),
"You can use biometrics", Toast.LENGTH_SHORT).show();
// make biometrics dialog
executor = ContextCompat.getMainExecutor(getActivity().getApplicationContext());
biometricPrompt = new BiometricPrompt(getActivity(), executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
Toast.makeText(getActivity().getApplicationContext(),
"Authentication error: " + errString, Toast.LENGTH_SHORT).show();
}
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Toast.makeText(getActivity().getApplicationContext(),
"Authentication succeeded!", Toast.LENGTH_SHORT).show();
stat.setText("OK");
authResult = true;
Bundle bundle = new Bundle();
bundle.putBoolean("auth", authResult);
nextFragment.setArguments(bundle);
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
Toast.makeText(getActivity().getApplicationContext(), "Authentication failed", Toast.LENGTH_SHORT).show();
}
});
// setup auth dialog
promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("Tittle | Biometric authentication")
.setSubtitle("SubTittle | Fingerprint or face")
.setDescription("Description")
.setNegativeButtonText("Cancel")
.build();
break;
case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
// TODO: функция для тех, у кого нет датчиков
Toast.makeText(getActivity().getApplicationContext(),
"This device don't have sensors", Toast.LENGTH_SHORT).show();
break;
case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
// TODO: функция для тех, у кого не настроены биометрические данные
Toast.makeText(getActivity().getApplicationContext(),
"You don't have saved fingerprints or face, check your security settings", Toast.LENGTH_SHORT).show();
break;
}
//*********************************
biometricPrompt.authenticate(promptInfo);
Данный код может быть только в активности или фрагменте. Мне же нужно, чтобы считывание биометрических данных было, например, подтверждением удаления файла, отправки и т.п. Т.е. много случаев, когда нужно применить аутентификацию. Как сделать, чтобы не писать 1000 раз один и тот же код?
Я уже пробовал поместить данный код в любой публичный класс - не получается, не работает. Странная ошибка и связана с тем, что в классе не-активности, нельзя указать какой-либо класс активности И парадокс: один из методов должен принять в качестве аргумента тип Activity, но если через конструктор передать текущую активность и указать её в качестве аргумента, то ничего не работает. Sos me