52 votes

Méthode d'appel lorsque le bouton d'accueil est enfoncé sur Android

J'ai donc cette méthode dans l'une de mes activités Android:

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        Log.d("Test", "Back button pressed!");
    }
    else if(keyCode == KeyEvent.KEYCODE_HOME)
    {
        Log.d("Test", "Home button pressed!");
    }
    return super.onKeyDown(keyCode, event);
}
 

Toutefois, même si KEYCODE_HOME est valide, la méthode de journalisation ne se déclenche jamais. Cela fonctionne pour le bouton retour si. Est-ce que quelqu'un sait pourquoi et comment le faire fonctionner?

Merci

35voto

Nick Campion Points 7263

Le bouton Home est très dangereux bouton pour remplacer et, de ce fait, Android ne vous permettra pas de remplacer son comportement de la même façon que le bouton de RETOUR.

Jetez un oeil à cette discussion.

Vous remarquerez que le bouton de la maison semble être mises en œuvre à l'intention de l'invocation, de sorte que vous finirez par avoir à ajouter une intention de catégorie à votre activité. Ensuite, chaque fois que l'utilisateur accède à la maison, votre application va apparaître comme une option. Vous devriez considérer ce que vous cherchez à accomplir avec le bouton home. Si ce n'est pas à remplacer la valeur par défaut de l'écran d'accueil de l'appareil, je me méfie de la surcharge sur le bouton HOME, mais il est possible (par la discussion dans le fil au-dessus.)

22voto

Raphael Points 159

Il m'a fallu presque un mois pour passer à travers cela. Tout à l'heure, j'ai résolu ce problème. Dans votre activité onPause (), vous devez inclure la condition suivante si:

     if (this.isFinishing()){
        //Insert your finishing code here
    }
 

La fonction isFinishing () renvoie un booléen. Vrai si votre application est en train de se fermer, Faux si votre application est toujours en cours d'exécution mais par exemple, l'écran s'éteint.

J'espère que ça aide!

13voto

Lior Points 3527

Le bouton HOME ne peut pas être intercepté par les applications. C'est une conception du comportement dans Android. La raison est d'empêcher des applications malveillantes de prendre le contrôle de votre téléphone (Si l'utilisateur ne peut pas appuyer sur le dos ou à la maison, il pourrait ne jamais être en mesure de quitter l'application). Le bouton Home est considéré comme l'utilisateur "zone de sécurité" et sera toujours de lancement de l'utilisateur est configuré à l'accueil de l'app.

La seule exception à ce qui précède est une application configurée comme remplacement à la maison. Ce qui signifie il a déclaré dans son AndroidManifest.xml pour l'activité concernée:

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Lorsque vous appuyez sur le bouton home, la maison actuelle de l'application de l'activité de l' onNewIntent sera appelée.

8voto

Aderito Brinca Points 223

J'ai trouvé que lorsque j'appuie sur le bouton HOME, la méthode onStop () est appelée. Vous pouvez utiliser le code suivant pour le surveiller:

 @Override
    protected void onStop() 
    {
        super.onStop();
        Log.d(tag, "MYonStop is called");
        // insert here your instructions
    }
 

1voto

WareNinja Points 3041

J'ai aussi eu du mal avec bouton de la MAISON pendant un certain temps. Je voulais arrêter/sauter un service d'arrière-plan (qui sondages emplacement) lorsque l'utilisateur clique bouton HOME.

voici ce que j'ai mis en place comme "hack" comme de la solution;

conserver l'état de l'application sur SharedPreferences à l'aide de la valeur booléenne

sur chaque activité

onResume() -> mis appactive=true

onPause() -> mis appactive=false

et le service d'arrière-plan vérifie la appstate dans chaque boucle, passe à l'action

SI appactive=false

il fonctionne bien pour moi, à moins de ne pas décharger la batterie plus espérons que cela aide....

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