Android: Как я могу определить, выйдет ли кнопка «Назад» из приложения (т. Е. Это последнее действие в стеке)? - PullRequest
23 голосов
/ 27 сентября 2011

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

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

Спасибо.

Ответы [ 2 ]

22 голосов
/ 27 сентября 2011

Приложение reddit is fun делает это путем переопределения метода 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);
    }
}
3 голосов
/ 27 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...