Android: Как определить, будет ли кнопка "Назад" выйти из приложения (т.е. Это последнее действие, оставшееся в стеке)?
Я хотел бы предупредить пользователя, если обратное нажатие завершит последнее действие в стеке, тем самым выйдя из приложения. Я хотел бы немного поднять тост и обнаружить второе обратное нажатие в течение следующих нескольких секунд и только затем вызвать finish()
.
Я уже закодировал обнаружение обратного пресса с помощью onBackPressed()
, но я не могу найти очевидный способ увидеть, сколько действий осталось на заднем стеке.
Спасибо.
Ответы
Ответ 1
Reddit - забавное приложение делает это путем переопределения метода onKeyDown:
public boolean onKeyDown(int keyCode, KeyEvent event) {
//Handle the back button
if(keyCode == KeyEvent.KEYCODE_BACK && isTaskRoot()) {
//Ask the user if they want to quit
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.quit)
.setMessage(R.string.really_quit)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//Stop the activity
finish();
}
})
.setNegativeButton(R.string.no, null)
.show();
return true;
}
else {
return super.onKeyDown(keyCode, event);
}
}
Ответ 2
Библиотека droid-fu делает это, проверяя стек запущенных задач и видя, является ли следующая задача домашним экраном Android. См. handleApplicationClosing
в https://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/activities/BetterActivityHelper.java.
Однако я бы использовал этот подход только в крайнем случае, так как он довольно хакен, не будет работать во всех ситуациях и потребует дополнительных разрешений для получения списка запущенных задач.