web-dev-qa-db-fra.com

Android: quitter l'application en appuyant sur le bouton Précédent

Dans mon application, je veux quitter l'application lorsque vous appuyez sur le bouton de retour, ceci est mon 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();
    }

ça fonctionne correctement mais quand je quitte l'application, il ne se ferme pas complètement et ne montre pas la page vide avec le logo de mon application et quand j'appuie à nouveau sur le bouton de sortie, comment puis-je résoudre le problème ???

MODIFIER :

J'utilise ce code au lieu de ci-dessus, mais mon application se ferme complètement, mais je veux qu'elle s'exécute en arrière-plan et ne se ferme pas complètement. Comment puis-je le faire?

@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

Lorsque vous appuyez sur la touche retour et que vous terminez votre activité actuelle (par exemple A), vous voyez une activité vide avec le logo de votre application (par exemple B), cela signifie simplement que l'activité B affichée après avoir terminé A est toujours dans le dossier, A a été démarré à partir de l'activité B, vous devez donc commencer l'activité A avec des drapeaux comme 

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

Maintenant, votre activité A est au top sur la pile, sans aucune autre activité de votre application sur le backstack.

Maintenant, dans l'activité A où vous voulez implémenter onBackPressed pour fermer l'application, vous pouvez faire quelque chose comme ça, 

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

        }

    }

Le gestionnaire gère ici les pressions arrières accidentelles. Il affiche simplement une variable Toast. S'il ferme une autre pression arrière dans les 3 secondes, il ferme l'application.

103
Rachit Mishra

Essaye ça:

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

J'ai eu le même problème, j'ai un LoginActivity et un MainActivity . Si je clique sur le bouton précédent dans MainActivity, Application doit fermer . Donc je l'ai fait avec la méthode OnBackPressed. Ce moveTaskToBack () fonctionne comme le bouton Home. Il laisse la pile Back telle quelle.

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

}
18
Tara

Cela signifie que votre activité précédente dans la pile lorsque vous démarrez cette activité. Ajoutez finish(); Après la ligne sur laquelle vous appelez cette activité.

Dans toutes vos activités précédentes. quand vous commencez une nouvelle activité comme-

startActivity(I);

Ajoutez finish(); après cela.

5
Kanwaljit Singh

Si je comprends bien, Google veut qu'Android gère la gestion de la mémoire et ferme les applications. Si vous devez quitter l'application à partir du code, il peut être utile de demander à Android d'exécuter le ramasse-miettes.

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

Vous pouvez également ajouter finish () au code, mais il est probablement redondant si vous exécutez également System.exit (0).

3
Matti

Terminer ne ferme pas l'application, il ferme simplement l'activité. S'il s'agit de l'activité du lanceur, votre application sera fermée. sinon, cela reviendra à l'activité précédente.

Ce que vous pouvez faire est d'utiliser onActivityResult pour déclencher autant de finish () que nécessaire pour fermer toutes les activités en cours.

1
gian1200

personne ne semble avoir recommandé noHistory = "true" dans le fichier manifest.xml pour empêcher certaines activités d'apparaître après l'appui du bouton Précédent qui, par défaut, appelle la méthode finish ()

1

Celui-ci fonctionne pour moi.J'ai trouvé moi-même en combinant d'autres réponses  

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

Pour quitter l'application en appuyant sur le bouton Précédent, vous devez d'abord effacer toutes les activités principales, puis démarrer le téléphone ACTION_MAIN du téléphone Android

Donc, vous devez écrire tout ce code qui est mentionné ci-dessous:

Remarque: dans votre cas, MainActivity est remplacée par YourActivity.

@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

Au lieu de finish(), appelez super.onBackPressed()

0
Shashika