80 votes

Aller à l'écran d'accueil de manière programmatique

Je veux accéder à l'écran d'accueil de manière programmatique dans Android lorsque l'utilisateur clique sur un bouton. Comment cela peut-il être fait ?

13 votes

S'il vous plaît, acceptez certaines de vos anciennes questions.

0 votes

Une façon simple de procéder est de remplacer onBackPressed ou par keyEvent =Backpressed et d'appeler onHomePressed sur ce dernier.

184voto

Janusz Points 52607

Vous pouvez le faire par le biais d'une Intention .

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

Cette intention lancera l'application de lancement que l'utilisateur a définie. Soyez prudent avec cela car votre application aura l'air de s'être écrasée si l'utilisateur ne s'y attend pas.

Si vous voulez créer un bouton de sortie de votre application, lisez cet article sur le site de la Commission européenne. Boutons de sortie dans Android

3 votes

J'ai lu que c'était très mal de faire cela dans une application. Mais pourquoi les gens disent-ils cela ? Je sais où je l'utilise. Et il semble que c'est la seule chose que je puisse faire pour faire ce que je veux faire. Alors est-ce que je peux l'utiliser ?

6 votes

La chose la plus simple qui fonctionne pour moi : startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)‌​); (FLAG_ACTIVITY_NEW_TASK ne semble pas être nécessaire).

0 votes

Il s'agit d'un ancien fil de discussion, mais bien que cela fonctionne, le retour à l'activité précédente ne fonctionne pas. Quels sont les attributs de cette activité ?

32voto

Nepster Points 893

Solution en une seule ligne

moveTaskToBack(true); //activity.moveTaskToBack(true);

il se comportera comme si le bouton Home était pressé

11voto

Peter Ajtai Points 26377

La réponse de Janusz est génial.

La seule chose que je veux ajouter, qui est un peu trop longue pour un commentaire, est que vous pouvez aller à l'écran d'accueil sans avoir une référence à l'activité en cours.

Le code de Janusz doit être appelé depuis une Activité ou un Fragment en raison de startActivity() ,

Pour contourner ce problème, vous pouvez stocker une référence statique au Contexte de votre application dans votre fichier d'application :

public class YourApplication extends Application
{

    private static Context mAppContext;

    public void onCreate()
    {
        super.onCreate();
        ...
        YourApplication.mAppContext = getApplicationContext();
    }

    public static Context getContext()
    {
        return mAppContext;
    }

}

Désormais, vous pouvez envoyer l'utilisateur vers l'écran d'accueil de l'appareil à partir de n'importe quelle classe de votre application, et pas seulement des activités, des fragments ou d'autres classes avec une référence à l'activité actuelle (vous pouvez décider si c'est une bonne ou une mauvaise chose) :

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
YourApplication.getContext().startActivity(startMain);

1voto

st0le Points 15318

De Développeur Android site

Voici quelques exemples d'autres opérations que vous pouvez spécifier comme intents en utilisant ces paramètres supplémentaires :

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

3 votes

StOle il n'y a rien de mal à poser des questions qui peuvent être répondues avec une recherche rapide sur google et un coup d'œil dans la documentation. Si la question contient les bons mots-clés, elle apparaîtra très rapidement sur la première page de Google et permettra de trouver les informations correctes et des exemples de code beaucoup plus rapidement qu'en consultant la documentation. Je suis un programmeur Android formé d'une manière ou d'une autre, mais je devrais aller sur Google et sauter une ou deux pages pour répondre à cette question. Ce serait formidable si la réponse à cette question se trouvait ici, où elle pourrait être modifiée, améliorée, mise à jour et évaluée.

1voto

rm -rf star Points 1162
startActivity((new Intent(Intent.ACTION_MAIN)).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X