Vibhor Gupta
Vibhor Gupta

Reputation: 77

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?

Upvotes: 2

Views: 1118

Answers (4)

Amir Dora.
Amir Dora.

Reputation: 2717

this is commonly used way to exit the app, also i recommend using "nohistory" attribute in manifest for activities other than MainActivity.

boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}

and for other activities use nohistory method in manifest

     <activity
        android:name="com.omniapay.salesservice.Activities.LoginActivity"
        android:label="LOGIN"
        android:noHistory="true" />

Upvotes: 0

AskNilesh
AskNilesh

Reputation: 69724

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

}

Upvotes: 5

Kakumanu siva krishna
Kakumanu siva krishna

Reputation: 714

It is a good code practice to write double back press to exit Main Activity.

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
    super.onBackPressed();
    return;
}

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}

Upvotes: 0

Sasi Kumar
Sasi Kumar

Reputation: 13358

add your MainActivity

@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}

Upvotes: 0

Related Questions