В моем приложении я встроил биометрическую аутентификацию, которая будет показывать пользователям экран и запрашивать их отпечатки пальцев / ПИН-код непосредственно после заставки.
public abstract class BaseActivity extends AppCompatActivity {
...
protected boolean authenticate() {
if (isBiometricEnabled) {
final KeyguardManager systemService = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
if (systemService == null) return false;
if (systemService.isKeyguardSecure()) {
final Intent confirmDeviceCredentialIntent = systemService
.createConfirmDeviceCredentialIntent(getString(R.string.app_name_long), getAuthBodyText());
startActivityForResult(confirmDeviceCredentialIntent, REQUEST_CODE_BIOMETRIC_AUTHENTICATION);
} else {
AlertDialog dialog = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle).create();
dialog.setTitle(R.string.security_dialog_title);
dialog.setMessage(getString(R.string.security_dialog_message));
dialog.setCancelable(false);
dialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.security_dialog_button), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
String action;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
action = Settings.ACTION_FINGERPRINT_ENROLL;
} else {
action = Settings.ACTION_SECURITY_SETTINGS;
}
intent.setAction(action);
startActivityForResult(intent, REQUEST_CODE_SETUP_BIOMETRIC);
}
});
dialog.show();
}
return true;
}
return false;
}
}
И внутри моей SplashActivity
public class SplashActivity extends BaseActivity {
public void authenticateAndNavigate() {
if (!authenticate()) {
navigateToHome();
}
}
}
Этот подход работает нормально.Тем не менее, я хочу изменить поведение, чтобы пользователи вынуждены вводить свой отпечаток пальца / PIN-код при каждом запуске приложения в фоновом режиме и возвращаться снова.
Я пытался добавить его в методе onResume()
внутримой BaseActivity
, но он не сработал, так как биометрическая активность будет отображаться onPause()
вызывается для моего BaseActivity
, и когда пользователь завершит работу, onResume()
будет вызван снова, и приложение будет зацикленопоказывает только биометрическую активность.
Есть еще идеи, как это реализовать?