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();
}
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.
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);
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);
}
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.
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)
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.
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 ()
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);
}
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);
}
Utilisez ceci code solution très simple
@Override
public void onBackPressed() {
super.onBackPressed(); // this line close the app on backpress
}