web-dev-qa-db-fra.com

android en appuyant sur le bouton retour devrait quitter l'application

Lorsqu'un utilisateur appuie sur le bouton de retour d'une intention, l'application doit quitter. Comment puis-je m'assurer que l'application se ferme lorsque le bouton Précédent est enfoncé?

40
d-man

Dans mon activité à la maison, je remplace le "onBackPressed" pour:

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

ainsi, si l'utilisateur est dans l'activité d'accueil et appuie en arrière, il passe à l'écran d'accueil.

J'ai pris le code de Aller à l'écran d'accueil par programme

86
Hugo

Une meilleure expérience utilisateur:

/**
 * 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

Pourquoi l'utilisateur n'a-t-il pas simplement appuyé sur le bouton d'accueil? Ils peuvent ensuite quitter votre application de n'importe laquelle de vos activités, pas seulement d'une activité spécifique.

Si vous êtes inquiet de voir votre application continuer à faire quelque chose en arrière-plan. Assurez-vous de l'arrêter dans les commandes onPause et onStop appropriées (qui seront déclenchées lorsque l'utilisateur appuera sur Accueil).

Si votre problème est que vous souhaitiez que l'utilisateur clique sur votre application pour qu'elle recommence au début, je vous recommande de placer un type d'élément de menu ou de bouton d'interface utilisateur à l'écran qui ramène l'utilisateur à l'activité de démarrage de votre app. Comme l'oiseau Twitter dans l'application Twitter officielle, etc.

2
Eric

L'application ne se fermera que s'il n'y a pas d'activités dans la pile arrière. SO ajoutez cette ligne dans votre manifeste Android: noHistory = "true" à toutes les activités pour lesquelles vous ne voulez pas être empilés.Et ensuite, pour fermer l'application, appelez finish () dans le OnBackPressed

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

Utilisez onBackPressedmethod

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

Cela résoudra votre problème.

2
Akila

Pour quitter une application Android, utilisez simplement . Dans votre activité principale ou utilisez le fichier manifeste Android pour définir

Android:noHistory="true"
1
Uday Shah

Tout d’abord, Android ne vous recommande pas de le faire avec le bouton Précédent, mais plutôt avec les méthodes de cycle de vie fournies. Le bouton retour ne doit pas détruire l'activité.

Des activités sont ajoutées à la pile, accessibles à partir de la vue d'ensemble (bouton carré depuis l'introduction de la conception de matériau dans la version 5.0) lorsque le bouton de retour est appuyé sur la dernière activité restante de la pile de l'interface utilisateur. Si l'utilisateur souhaite fermer votre application, il doit la glisser (la fermer) dans le menu Vue d'ensemble.

Votre application est responsable de l'arrêt des tâches en arrière-plan et des tâches que vous ne souhaitez pas exécuter, avec les méthodes de cycle de vie onPause (), onStop () et onDestroy (). Pour en savoir plus sur les cycles de vie et leur mise en œuvre appropriée, cliquez ici: http://developer.Android.com/training/basics/activity-lifecycle/stopping.html

Mais pour répondre à votre question, vous pouvez utiliser hacks pour implémenter le comportement exact souhaité, mais comme je l'ai dit, il n'est pas recommandé:

@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

finissez votre current_activity en utilisant la méthode finish() onBack method of your current_activity

puis ajoutez les lignes ci-dessous dans onDestroy de la current_activity pour la suppression de la force close

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

J'ai modifié la réponse de @Vlad_Spays pour que le bouton Précédent agisse normalement, sauf s'il s'agit du dernier élément de la pile. Il invite ensuite l'utilisateur à quitter l'application.

@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
seekingStillness