Подтвердить что ты не робот

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

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

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

Спасибо.

4b9b3361

Ответ 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.

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