Android: Как определить, будет ли кнопка «Назад» выйти из приложения (т. Е. Это последнее действие, оставшееся в стеке)?

Я хотел бы предупредить пользователя, если обратное нажатие закончит последнее действие в стеке, тем самым выйдя из приложения. Я хотел бы немного поднять тост и обнаружить второе обратное нажатие в течение следующих нескольких секунд, и только затем вызывать финиш ().

Я уже закодировал обнаружение обратного пресса, используя onBackPressed (), но я не могу найти очевидный способ увидеть, сколько действий осталось на заднем стеке.

Благодарю.

Solutions Collecting From Web of "Android: Как определить, будет ли кнопка «Назад» выйти из приложения (т. Е. Это последнее действие, оставшееся в стеке)?"

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); } } 

Библиотека droid-fu делает это, проверяя стек запущенных задач и видя, является ли следующая задача домашним экраном Android. См. handleApplicationClosing на странице https://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/activities/BetterActivityHelper.java .

Тем не менее, я бы использовал этот подход только в крайнем случае, так как он довольно хакерский, не будет работать во всех ситуациях и требует дополнительных разрешений для получения списка запущенных задач.