Android: How can I detect if the Back button will exit the app (i.e. this is the last activity left on the stack)? Android: How can I detect if the Back button will exit the app (i.e. this is the last activity left on the stack)? android android

Android: How can I detect if the Back button will exit the app (i.e. this is the last activity left on the stack)?


The reddit is fun app does this by overriding the onKeyDown method:

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


The droid-fu library does this by checking the stack of running tasks and seeing if the next task is the android home screen. See handleApplicationClosing at https://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/activities/BetterActivityHelper.java.

However, I would only use this approach as a last resort since it's quite hacky, won't work in all situations, and requires extra permissions to get the list of running tasks.