2011-05-06 4 views
0

En utilisant le setOnKeyListener je peux capable d'écouter tous les boutons physiques sauf bouton Home et End, est-il possible d'attraper l'action du bouton Home.Accueil écouteur de bouton

+4

Je suis sûr que vous ne pouvez pas remplacer Home. Pourquoi voudriez-vous? –

+0

Dans mon application, je lis des fichiers importants qui ne devraient pas être accessibles par une tierce personne, Si je quitte correctement l'application, ce n'est pas possible, mais lorsque l'utilisateur appuie sur Accueil de cette activité, il est possible d'ouvrir cette activité pour recherche. – Vignesh

+1

L'approche avec le bouton Accueil attractif n'est pas valide. Vous devez suivre le cycle de vie de l'activité et voir ce qui se passe lorsque l'utilisateur appuie sur le bouton Accueil. – Zelimir

Répondre

2

Vous n'avez pas besoin d'appuyer sur le bouton Accueil. Si l'utilisateur appuie sur Accueil et qu'une autre activité arrive au premier plan, votre application passe en arrière-plan et onPause() est appelée dans votre activité actuelle. Vous pouvez remplacer cette fonction pour nettoyer la chaîne de recherche ou tout ce dont vous avez besoin.

MISE À JOUR:

solution plus propre est d'utiliser FLAG_ACTIVITY_NO_HISTORY drapeau lors du démarrage que l'activité critique. Ainsi, lorsque votre activité passe en arrière-plan, le système la ferme correctement pour vous.

+0

Salut Zelimir, j'ai appelé la fonction finish() dans la fonction onStop(), donc ça marche mais ça montre Désolé l'application s'est arrêtée de façon inattendue. – Vignesh

+0

La première ligne doit être super.onPause(); et alors vous pouvez appeler finish(). Si cela ne vous aide pas, postez la première ligne du rapport d'erreurs contenant des informations utiles. – Zelimir

+0

Salut Zelimir, finish() dans onPause() termine l'activité pendant le changement d'orientation, donc je l'ai donné à l'intérieur de onStop() et je suis désolé que l'application soit fermée de manière inattendue. – Vignesh

1

Vous souhaitez utiliser public boolean dispatchKeyEvent(KeyEvent event), comme indiqué ici: http://developer.android.com/reference/android/app/Activity.html#dispatchKeyEvent%28android.view.KeyEvent%29.

Utilisez comme si:

@Override 
     public boolean dispatchKeyEvent(KeyEvent event) 
     { 
    // do whatever you want to do here, then return true if you handled the key code 
if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch (event.getKeyCode()) { 
      case KeyEvent.KEYCODE_BACK: 
       mBackDown = true; 
       return true; 
      case KeyEvent.KEYCODE_HOME: 
       mHomeDown = true; 
       return true; 
      } 
} 
    return super.dispatchKeyEvent(event); // let the default handling take care of it 
    } 

Laissez-moi savoir si cela fonctionne pour vous.

EDIT: je ne sais pas pourquoi cela ne fonctionne pas pour vous, mais sans regarder à travers le reste de votre code, il serait difficile de dire exactement ce qui se passe. Toutefois, pour votre tâche, ce que je recommanderais, c'est que vous utilisiez l'attribut finishOnTaskLaunch manifest, comme décrit à http://developer.android.com/guide/topics/manifest/activity-element.html#finish: correctement utilisé (réglez-le sur true) cela vous assurera que si votre activité est relancée, elle arrêtera toute instance existante .

+0

Bonjour Femi, il ne fonctionne toujours pas pour les boutons Home, End et Power. – Vignesh

+0

Odd: ça marche pour moi, au moins avec les boutons Home et Back. Je ne suis pas sûr du bouton END: je ne sais pas s'il existe un bouton physique pour END. En outre, pour HOME, vous devrez peut-être faire de votre activité un écran d'accueil (sinon je crois que Android filtre cette touche). Et je ne crois pas que vous pouvez piéger le bouton POWER: ce serait un problème de sécurité majeur à mon avis: quelqu'un pourrait écrire quelque chose qui a refusé de vous laisser éteindre votre appareil. Donc, vous pourriez ne pas avoir de chance sur le bouton d'alimentation. – Femi

+0

Salut Femi, je n'ai pas besoin d'écouter le bouton Fin ou le bouton d'alimentation, je veux seulement écouter le bouton Home, je vous informe juste que l'écouteur pour Home, End et Power ne fonctionne pas. – Vignesh

1

Ceci n'est possible que si vous modifiez le code source android principal. Bien que ce n'est pas recommandé pour les applications. Mais plus orienté vers les menus cachés.

public static final int KEYCODE_HOME 

Since: API Level 1 
Key code constant: Home key. This key is handled by the framework and is never delivered to applications. 
Constant Value: 3 (0x00000003) 
3

Vous pouvez essayer sur Android 4.0+:
1. Inscrivez-vous un BroadcastReceiver pour Intent.ACTION_CLOSE_SYSTEM_DIALOGS.
2. Appelez Intent.getStringExtra ("raison") pour obtenir la raison. Les raisons sont ci-dessous:
"clé d'accueil" pour la touche d'accueil enfoncée;
"assistance" pour la touche d'accueil à long appui;

Questions connexes