it-swarm.com.de

android Drücken der Zurück-Taste sollte die App beenden

Wenn ein Benutzer während einer Absicht die Zurück-Taste drückt, sollte die Anwendung beendet werden. Wie kann ich sicherstellen, dass die Anwendung beendet wird, wenn die Zurück-Taste gedrückt wird?

40
d-man

Stellen Sie unmittelbar nach dem Starten einer neuen Aktivität mit startActivity sicher, dass Sie finish() aufrufen, damit die aktuelle Aktivität nicht hinter der neuen gestapelt wird.

EDIT In Bezug auf Ihren Kommentar:

Was Sie vorschlagen, ist nicht besonders, wie der Android App-Fluss normalerweise funktioniert und wie die Benutzer erwarten, dass er funktioniert. Was Sie tun können , wenn Sie wirklich wollen, ist sicherzustellen, dass jeder startActivity, der zu dieser Aktivität führt, ein startActivityForResult ist und einen onActivityResult-Listener hat, der nach einem Beendigungscode sucht. und sprudelt das zurück. Sie können lesen Sie mehr darüber hier . Verwenden Sie setResult, bevor Sie eine Aktivität beenden, um einen Beendigungscode Ihrer Wahl festzulegen. Wenn Ihre übergeordnete Aktivität diesen Beendigungscode erhält, setzen Sie ihn in diese Aktivität und beenden Sie diese eine, etc ...

43
David Hedlund

In meiner Home Activity überschreibe ich das "onBackPressed" auf:

@Override
public void onBackPressed() {
   Intent intent = new Intent(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_HOME);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(intent);
 }

wenn sich der Benutzer also in der Ausgangsaktivität befindet und zurück drückt, wechselt er zum Startbildschirm.

Ich habe den Code von Gehe zum Startbildschirm programmgesteuert

86
Hugo

Eine bessere Benutzererfahrung:

/**
 * Back button listener.
 * Will close the application if the back button pressed twice.
 */
@Override
public void onBackPressed()
{
    if(backButtonCount >= 1)
    {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
        backButtonCount++;
    }
}
25
Vlad Spreys

Warum drückt der Benutzer nicht einfach die Home-Taste? Dann können sie Ihre App von jeder Ihrer Aktivitäten beenden, nicht nur von einer bestimmten.

Wenn Sie sich Sorgen machen, dass Ihre Anwendung weiterhin etwas im Hintergrund tut. Stellen Sie sicher, dass Sie ihn in den entsprechenden Befehlen onPause und onStop stoppen (die ausgelöst werden, wenn der Benutzer Home drückt).

Wenn Ihr Problem beim nächsten Klicken des Benutzers auf Ihre App beginnt, damit es wieder am Anfang beginnt, empfehle ich Ihnen, eine Art Menüelement oder eine UI-Schaltfläche auf dem Bildschirm zu platzieren, die den Benutzer zur Startaktivität Ihres Computers zurückführt App. Wie der Twitter-Vogel in der offiziellen Twitter-App usw.

2
Eric

Die App wird nur beendet, wenn sich keine Aktivitäten im Backstack befinden. SO füge diese Zeile in dein Manifest ein Android: noHistory = "true" zu allen Aktivitäten, die nicht gestapelt werden sollen. Und dann, um den App-Aufruf zu schließen das finish () im OnBackPressed

<activity Android:name=".activities.DemoActivity"
            Android:screenOrientation="portrait"
            **Android:noHistory="true"**
            />
2
Sagar Devanga

Verwenden Sie onBackPressedmethod

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

Dies wird Ihr Problem lösen.

2
Akila

Um eine Android-App zu beenden, verwenden Sie einfach . In Ihrer Hauptaktivität, oder Sie können eine Android-Manifestdatei verwenden

Android:noHistory="true"
1
Uday Shah

Zuallererst empfiehlt Android nicht, dies über die Schaltfläche "Zurück" zu tun, sondern mithilfe der bereitgestellten Lebenszyklusmethoden. Die Schaltfläche "Zurück" sollte die Aktivität nicht zerstören.

Dem Stapel werden Aktivitäten hinzugefügt, auf die über die Übersicht zugegriffen werden kann (rechteckige Schaltfläche seit Einführung des Materialdesigns in 5.0), wenn die Zurück-Schaltfläche für die letzte verbleibende Aktivität im Stapel der Benutzeroberfläche gedrückt wird. Wenn der Benutzer Ihre App schließen möchte, sollte er sie über das Menü Übersicht entfernen (schließen).

Ihre App ist dafür verantwortlich, alle Hintergrundaufgaben und -aufträge zu stoppen, die Sie bei den Lebenszyklusmethoden onPause (), onStop () und onDestroy () nicht ausführen möchten. Lesen Sie hier mehr über die Lebenszyklen und deren ordnungsgemäße Implementierung: http://developer.Android.com/training/basics/activity-lifecycle/stopping.html

Aber um Ihre Frage zu beantworten, können Sie hacks tun, um das gewünschte Verhalten zu implementieren , aber wie gesagt, es wird nicht empfohlen :

@Override
 public void onBackPressed() {

// make sure you have this outcommented
// super.onBackPressed();
 Intent intent = new Intent(Intent.ACTION_MAIN);
 intent.addCategory(Intent.CATEGORY_HOME);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);
}
1
captainserious

beende deine current_activity mit der Methode finish() onBack method of your current_activity

und fügen Sie dann in onDestroy die folgenden Zeilen hinzu: current_activity for Remove Remove

@Override
public void onDestroy()
{
    Android.os.Process.killProcess(Android.os.Process.myPid());
    super.onDestroy();
}
0
Naveed Ahmad

Ich habe die @Vlad_Spays-Antwort so geändert, dass die Zurück-Schaltfläche normal funktioniert, es sei denn, es handelt sich um das letzte Element im Stapel. Der Benutzer wird vor dem Beenden der App dazu aufgefordert.

@Override
public void onBackPressed(){
    if (isTaskRoot()){
        if (backButtonCount >= 1){
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }else{
            Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
            backButtonCount++;
        }
    }else{
        super.onBackPressed();
    }
}
0