Android: quitter l'application lorsque vous appuyez sur le bouton Retour

dans mon application je veux sortir de l'application lorsque j'appuie sur le bouton back, c'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();
    }

cela fonctionne correctement mais quand je sors de l'application, il ne sort pas complètement et afficher la page vide avec mon logo app et quand j'appuie à nouveau sur le bouton Retour sortie de l'application, Comment puis-je le réparer???

EDIT :

j'utilise ce code au lieu de ci-dessus mais mon app sort complètement mais je veux qu'il tourne en arrière-plan et ne sorte pas complètement, comment puis-je faire il?

@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();
    } 
36
demandé sur Elham Gdz 2013-12-15 10:39:45

11 réponses

quand vous appuyez en arrière et puis vous terminez votre activité actuelle (par exemple A), vous voyez une activité vierge avec votre logo d'application(par exemple B), cela signifie simplement que l'activité B qui est montrée après avoir terminé A est toujours dans les coulisses, et aussi l'activité A a été commencée de l'activité B, donc dans l'activité, vous devriez 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 en haut de la pile avec aucune autre activité de votre application dans les coulisses.

maintenant dans L'activité A là où vous voulez implémenter onBackPressed pour fermer l'application, vous pouvez faire quelque chose comme ceci,

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 Handler ici manipule des presses arrière accidentelles, il montre simplement un Toast, et s'il y a une autre presse arrière dans les 3 secondes, elle ferme l'application.

102
répondu Rachit Mishra 2014-12-24 09:58:14

essaye ceci:

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);
42
répondu Md. Ilyas Hasan Mamun 2014-08-18 12:14:25

j'ai eu le même problème, j'ai une Loginactivité et une Mainactivité. Si je clique sur le bouton précédent dans MainActivity, L'Application doit fermer. Je l'ai fait avec la méthode OnBackPressed. ce bouton moveTaskToBack () fonctionne comme le bouton Home. Il laisse la pile arrière telle qu'elle est.

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

}
14
répondu Tara 2016-04-20 09:10:04

cela signifie votre activité précédente dans stack lorsque vous commencez cette activité. Ajouter finish(); après la ligne dans laquelle vous appelez cette activité.

dans votre activité précédente. lorsque vous démarrez une nouvelle activité comme-

startActivity(I);

Ajouter finish(); après cela.

5
répondu Kanwaljit Singh 2013-12-15 06:57:26

D'après ce que J'ai compris, Google veut que Android gère la gestion de la mémoire et ferme les applications. Si vous devez sortir l'application du code, il pourrait être bénéfique de demander à Android de lancer garbage collector.

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

Vous pouvez aussi ajouter finish () au code, mais il est probablement redondant, si vous faites aussi Système.exit (0)

3
répondu Matti 2016-12-11 08:54:51

Finition de ne pas fermer l'application, il ferme juste l'activité. Si c'est l'activité de lancement, alors il fermera votre application; sinon, il retournera à l'activité précédente.

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

1
répondu gian1200 2013-12-15 07:07:34

personne ne semble avoir recommandé noHistory="true" dans le manifeste.xml pour empêcher qu'une certaine activité n'apparaisse après que vous appuyez sur le bouton Retour qui par défaut appelle la méthode finish ()

1
répondu Achmad Naufal Syafiq 2017-07-18 05:08:21

celui-ci travaille pour moi.Je l'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
répondu Bivin 2017-08-08 14:35:11

au Lieu de finish() appel super.onBackPressed()

0
répondu Shashika 2013-12-15 06:44:33

pour sortir de l'application en appuyant sur le bouton back, vous devez d'abord effacer toutes les activités de haut et puis démarrer L'ACTION_MAIN de android phone

donc, vous devez écrire tous ces codes seulement qui est mentionné ci-dessous:

Note : dans votre cas MainActivity get replaced by your activity

@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
répondu Aman Gupta 2018-04-01 13:26:41

Utilisez ceci code solution très simple

 @Override
    public void onBackPressed() {
      super.onBackPressed(); // this line close the  app on backpress
 }
-6
répondu bambi 2016-03-12 07:08:01