androidandroid-layoutandroid-studioandroid-sdk-toolsandroid-event

How to exit the android application on backpress?


The situation could be like say, I've 5 activities. Say Main activity, Activity 1, Activity 2, Activity 3 and Activity 4.

One can use the Activity 1,2,3 & 4 directly with the help of buttons so inserted on Main Activity layout.

Situation: User enters into the Main Activity, and presses a button to enter into Activity 2. Then he back presses and comes back to Main Activity. from there he now enters Activity 3 with the help of another button and similarly when he presses back button he enters into Main Activity.

Main Activity --> Activity 2 --> Main Activity --> Activity 3 --> Main Activity.

Problem: Now as the user enters from Activity 3 to Main Activity. The user is on Main Activity layout. And now if the user presses the back button on its phone, then it will take the following process to exit the app:

Main Activity --> Activity 3 --> Main Activity --> Activity 2 --> Main Activity --> EXIT

Needs to be done: I want to exit the app from the Main Activity itself, if the user presses the back button on its phone, then instead of following the above path to exit the app, I want that the user should be able to exit it from the Main Activity itself by displaying a simple AlertDialog box.

How could that be done, as I'm unable to find a solution to this problem?


Solution

  • You need to Override onBackPressed() inside your MainActivity() and use finishAffinity to finish all activities

    onBackPressed()

    Called when the activity has detected the user's press of the back key.

    finishAffinity() : added in API level 16

    Finish this activity as well as all activities immediately below it in the current task that have the same affinity.

    SAMPLE CODE

    @Override
    public void onBackPressed() {
      super.onBackPressed();
      ActivityCompat.finishAffinity(MainActivity.this);
    }
    

    EDIT

    I want that the user should be able to exit it from the Main Activity itself by displaying a simple AlertDialog box.

    @Override
    public void onBackPressed() {
    
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
                    .setTitle("Alert")
                    .setCancelable(false)
                    .setMessage("Are your sure want to exit?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.finishAffinity(MainActivity.this);
                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
    
                        }
                    });
    
            builder.show();
    
    }