it-swarm.com.de

Android: Anwendung beenden, wenn Sie die Zurück-Taste drücken

In meiner Anwendung möchte ich die App verlassen, wenn der Zurück-Button gedrückt wird. Dies ist mein Code:

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(Android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }).setNegativeButton("No", null).show();
    }

es funktioniert korrekt, aber wenn ich die App verlasse, wird es nicht vollständig beendet und zeigt eine leere Seite mit meinem App-Logo.

BEARBEITEN:

Ich benutze diesen Code anstelle von oben, aber meine App wird vollständig beendet, aber ich möchte, dass er im Hintergrund ausgeführt wird und nicht vollständig beendet wird. Wie kann ich das tun?

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(Android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                    }
                }).setNegativeButton("no", null).show();
    } 
37
Elham Gdz

Wenn Sie zurück drücken und Ihre aktuelle Aktivität beenden (beispielsweise A), sehen Sie eine leere Aktivität mit Ihrem App-Logo (beispielsweise B). Dies bedeutet lediglich, dass Aktivität B, die nach Beendigung von A angezeigt wird, noch im Backstack ist A wurde von Aktivität B aus gestartet. Sie sollten also Aktivität A mit Flags als starten 

Intent launchNextActivity;
launchNextActivity = new Intent(B.class, A.class);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);                  
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(launchNextActivity);

Jetzt ist Ihre Aktivität A ganz oben auf dem Stapel, ohne weitere Aktivitäten Ihrer Anwendung auf dem Backstack.

Jetzt in der Aktivität A, in der Sie onBackPressed implementieren möchten, um die App zu schließen, können Sie Folgendes tun: 

private Boolean exit = false;
@Override
    public void onBackPressed() {
        if (exit) {
            finish(); // finish activity
        } else {
            Toast.makeText(this, "Press Back again to Exit.",
                    Toast.LENGTH_SHORT).show();
            exit = true;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    exit = false;
                }
            }, 3 * 1000);

        }

    }

Der Handler handhabt hier versehentliches Zurückdrücken, er zeigt einfach ein Toast und wenn innerhalb von 3 Sekunden erneut ein Zurückdrücken erfolgt, wird die Anwendung geschlossen.

103
Rachit Mishra

Versuche dies:

Intent intent = new Intent(Intent.ACTION_MAIN);
          intent.addCategory(Intent.CATEGORY_HOME);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
          startActivity(intent);
          finish();
          System.exit(0);
44

Ich hatte das gleiche Problem, ich habe eine LoginActivity und eine MainActivity . Wenn ich in MainActivity auf die Schaltfläche "Zurück" klicke, muss Application geschlossen werden . SO habe ich mit der OnBackPressed-Methode gemacht. Dieses moveTaskToBack () funktioniert genauso wie der Home Button. Der Back-Stack bleibt unverändert.

public void onBackPressed() {
  //  super.onBackPressed();
    moveTaskToBack(true);

}
18
Tara

Es bedeutet, dass Sie Ihre vorherige Aktivität im Stapel haben, wenn Sie diese Aktivität starten. Fügen Sie nach der Zeile, in der Sie diese Aktivität aufrufen, finish(); Hinzu.

In Ihrer gesamten vorherigen Tätigkeit. wenn Sie eine neue Aktivität beginnen,

startActivity(I);

Fügen Sie danach finish(); hinzu.

5
Kanwaljit Singh

Nach meinem Verständnis möchte Google, dass Android die Speicherverwaltung übernimmt und die Apps herunterfährt. Wenn Sie die App vom Code aus beenden müssen, kann es von Vorteil sein, Android mit dem Garbage Collector zu beauftragen.

@Override
public void onBackPressed(){
    System.gc();
    System.exit(0);
}

Sie können dem Code auch finish () hinzufügen, aber es ist wahrscheinlich überflüssig, wenn Sie auch System.exit (0) ausführen.

3
Matti

Beenden schließt die App nicht, es schließt nur die Aktivität. Wenn dies die Launcher-Aktivität ist, wird Ihre App geschlossen. Wenn nicht, wird auf die vorherige Aktivität zurückgegriffen.

Sie können onActivityResult verwenden, um so viele finish () auszulösen, wie erforderlich sind, um alle offenen Aktivitäten zu schließen.

1
gian1200

niemand scheint anscheinend noHistory = "true" in manifest.xml empfohlen zu haben, um zu verhindern, dass bestimmte Aktivitäten angezeigt werden, nachdem Sie die Zurück-Taste gedrückt haben, die standardmäßig die Methode finish () aufruft.

Diese Arbeit für mich. Ich fand es selbst, indem ich andere Antworten kombinierte

private Boolean exit = false;
@override
public void onBackPressed(){ 
    if (exit) {
        finish(); // finish activity
    } 
    else {
        Toast.makeText(this, "Press Back again to Exit.",
            Toast.LENGTH_SHORT).show();
         exit = true;
         new Handler().postDelayed(new Runnable() {

         @Override
         public void run() {
             // TODO Auto-generated method stub
             Intent a = new Intent(Intent.ACTION_MAIN);
             a.addCategory(Intent.CATEGORY_HOME);
             a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(a);
        }
    }, 1000);
}
1
Bivin

Um die App durch Drücken der Zurück-Taste zu beenden, müssen Sie zuerst alle Top-Aktivitäten löschen und dann den ACTION_MAIN des Android-Handys starten

Sie müssen also nur den gesamten Code schreiben, der unten aufgeführt ist:

Hinweis: In Ihrem Fall wird MainActivity durch YourActivity ersetzt

@Override
public void onBackPressed() {

        new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(Android.R.string.no, null)
                .setPositiveButton(Android.R.string.yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MainActivity.super.onBackPressed();
                        quit();
                    }
                }).create().show();
    }


public void quit() {
        Intent start = new Intent(Intent.ACTION_MAIN);
        start.addCategory(Intent.CATEGORY_HOME);
        start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(start);
    }
0
Aman Gupta

Anstelle von finish() call super.onBackPressed()

0
Shashika