web-dev-qa-db-fra.com

Comment quitter l'application et afficher l'écran d'accueil?

J'ai une application où, sur la page d'accueil, j'ai des boutons pour naviguer dans l'application.

Sur cette page, j'ai un bouton "EXIT" qui, lorsqu'il est cliqué, devrait amener l'utilisateur à l'écran d'accueil du téléphone où se trouve l'icône de l'application.

Comment puis je faire ça?

193
poojan9118

La conception d'Android ne favorise pas la sortie d'une application par choix, mais la gère plutôt par le système d'exploitation. Vous pouvez faire apparaître l'application Home par son intention correspondante:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
322
ognian

Peut-être que vous pouvez essayer quelque chose comme ça

Supposons que dans notre application, nous avons un certain nombre d'activités (disons dix) et que nous devons sortir directement de cette activité. Ce que nous pouvons faire, c’est créer une intention et aller à l’activité racine et définir l’indicateur dans l’intention comme suit:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

aussi, ajoutez un peu comme booléen à l'intention

intent.putExtra("EXIT", true);

Ensuite, dans l’activité racine, vérifiez la valeur de boolean et, en fonction de cet appel, finish (), dans la onCreate() de l’activité racine

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
73
Kartik Domadiya
System.exit(0);

Est probablement ce que vous recherchez. Cela fermera toute l'application et vous amènera à l'écran d'accueil.

28
Ndupza

Cela fonctionne bien pour moi.
Fermez toutes les activités précédentes comme suit:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

Puis, dans la méthode onActivity () de MainActivity, ajoutez ceci pour terminer la tâche MainActivity.

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
25
Lazy Ninja

d'abord terminer votre application en utilisant la méthode finish();

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

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
23
user1699548

Si vous souhaitez mettre fin à une activité, vous pouvez simplement appeler finish(). Il est toutefois déconseillé d’afficher un bouton de sortie à l’écran.

19
Christian

Il n'est pas recommandé de quitter votre application Android. Voir cette question pour plus de détails.

L'utilisateur peut toujours quitter votre application via le bouton d'accueil ou dans la première activité via le bouton de retour.

16
Janusz

Certaines activités que vous ne voulez pas ouvrir à nouveau lorsque vous cliquez sur le bouton Précédent sont les suivantes: activité écran de démarrage, activité de l'écran d'accueil, fenêtres de confirmation. En fait, vous n’avez pas besoin de cela dans la pile d’activités. vous pouvez le faire en utilisant => ouvrir le fichier manifest.xml et ajouter un attribut

Android: noHistory = "true"

à ces activités.

<activity
    Android:name="com.example.shoppingapp.AddNewItems"
    Android:label="" 
    Android:noHistory="true">
</activity>

OR

Parfois, vous souhaitez fermer l’application entière en appuyant sur le bouton Précédent. La meilleure pratique consiste à ouvrir la fenêtre d’accueil au lieu de quitter l’application. Pour cela, vous devez remplacer la méthode onBackPressed (). généralement, cette méthode ouvre la première activité de la pile.

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

}

OR

En appuyant sur le bouton Précédent, vous souhaitez quitter cette activité et vous ne souhaitez pas non plus l'ajouter à la pile d'activités. Méthode call () dans la méthode onBackPressed (). il ne fera pas fermer l'application entière. il ira pour l'activité précédente dans la pile.

@Override
public void onBackPressed() {
  finish();
}
16
Burusothman

(J'ai essayé les réponses précédentes mais certaines lacunes manquent. Par exemple, si vous ne faites pas de return; après avoir terminé l'activité, le code d'activité restant est exécuté. Vous devez également éditer onCreate avec return. Si vous ne l'exécutez pas, super.onCreate () vous obtiendrez une erreur d'exécution)

Disons que vous avez MainActivity et ChildActivity.

Dans ChildActivity, ajoutez ceci:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

Dans onCreate de MainActivity, ajoutez ceci:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
5
trante

Une autre option consiste à utiliser la méthode FinishAffinity pour fermer toutes les tâches de la pile liées à l'application.

Voir: https://stackoverflow.com/a/27765687/1984636

4
sivi

Voici ce que j'ai fait:

SomeActivity.Java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.Java

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}

En gros, ce que vous avez fait est de supprimer toutes les activités de la pile et de lancer QuitAppActivity, ce qui terminera la tâche.

3
Irshu

Lorsque vous appelez finir, onDestroy () de cette activité sera appelé et il reviendra à l’activité précédente dans la pile d’activités ... Donc, pour quitter, n’appelez pas finish ();

3
Isham

Je l'ai fait avec le mode observateur.

Interface d'observateur

public interface Observer {
public void update(Subject subject);
}

Sujet de base

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

Sujet enfant implémente la méthode de sortie

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

Mon application que votre application devrait étendre

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

Activité de base

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

testons-le

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}
0
Hunter

J'ai essayé de quitter l'application en utilisant l'extrait de code suivant, cela a fonctionné pour moi. J'espère que cela vous aide. j'ai fait une petite démo avec 2 activités

première activité

public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt("exitApp", 0) == 1){
            editer.putInt("exitApp", 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}

votre toute autre activité

public class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_any);

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt("exitApp",1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}
0

100% fonctionne bien. c'est le code pour Quitter votre application onClick (Method)

    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            Android.os.Process.killProcess(Android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();

        }
    });
0
Vivek Akkaldevi

Ajoutez les lignes suivantes après finish(); dans onDestroy():

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
0
Ramanathan

si vous voulez quitter l'application mettez ce code sous votre fonction

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}
0
Dila Gurung