Основная проблема заключается в том, что вам нужно получить определенное поведение, когда вы запускаете действие из фона.Если вы переопределите методы onPause () и onResume (), у вас будет точный ответ, но не решение.Проблема заключается в том, что методы onPause () и onResume () вызываются, даже если вы не минимизируете свое приложение, их можно вызывать, когда вы запускаете действие, а затем нажимаете кнопку «Назад», чтобы вернуться к своей деятельности.Чтобы устранить эту проблему и действительно знать, когда ваше приложение приходит из фона, вы должны получить запущенный процесс и сравнить его с вашим процессом:
private boolean isApplicationBroughtToBackground() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(getPackageName())) {
return true;
}
}
return false;
}
Теперь вам нужно объявить логическую переменную:
public boolean wasPaused = false;
И спросите, когда ваша активность переходит в фоновый режим:
@Override
public void onPause(){
super.onPause();
if(isApplicationBroughtToBackground())
wasPaused = true;
}
Теперь, когда ваша активность снова появится на экране, спросите в методе onResume ():
@Override
public void onResume(){
super.onResume();
if(wasPaused){
lockScreen(true);
}
wasPaused = false;
}
И это все.Теперь, когда ваша активность переходит в фоновый режим, а затем пользователь выводит ее на передний план, появляется экран блокировки.
Если вы хотите повторить это поведение для любой активности вашего приложения, вы должны создать действие(может быть BaseActivity), поместите эти методы, и все ваши действия должны наследоваться от BaseActivity.
Я надеюсь, что это поможет вам.
Привет!