6
votes

Détecter / désactiver la touche Appuyez sur Android

Comment puis-je détecter le bouton d'alimentation ou le bouton d'écran de verrouillage étant enfoncé? Quand mon jeu est en pause de cette façon, il peut causer un crash du jeu car je dois mettre un fil quand il se produit.


3 commentaires

Les chances sont votre problème est mieux résolu en mettant en œuvre correctement le cycle de vie d'activité, en particulier en prenant les actions appropriées en réponse aux différents messages.


Vous ne devriez pas rechercher des presses de clé pour réparer votre application. Le cycle de vie Android est un bien meilleur choix et doit résoudre le problème de la pause de votre jeu lorsque l'utilisateur se ferme ou la met en pause. Avez-vous essayé de remplacer onpaause dans l'activité ?


Je l'ai fait, mais je pense que je manipule mal mes discussions pour le moment. Je vais devoir retourner et peut-être essayer de les gérer dans différentes méthodes, puis écrivez le code de gestion du problème de verrouillage dans la méthode de l'onpause


5 Réponses :


8
votes

Utilisez le OnaAUSe et Onresume Méthodes. Celles-ci sont appelées lorsque votre application n'est plus au premier plan (lorsqu'un écran de verrouillage se présente) ou lorsque le téléphone est mis en veille, et lorsque votre application est ramenée au premier plan.

Ceci est le processus standard du cycle de vie d'activité dans Android, qui est plus entièrement documenté ici .


3 commentaires

J'ai eu un sentiment que cela allait être de la façon de le faire. Le seul problème est en ce moment que j'utilise déjà ces méthodes pour tuer mes threads et ramener l'écran de jeu au menu lorsque l'utilisateur souhaite quitter le jeu ... Donc, cela doit être pourquoi le jeu se bloque complètement lorsque ce bouton est pressé ... Hmmm peut avoir à gérer les choses différemment.


Vous pouvez essayer de les déplacer vers OnStart et / ou OnStop et voyez ce qui se passe. Il peut être nécessaire d'être plus tôt ou plus tard dans le cycle de vie pour éviter les problèmes de thread.


Merci, je vais essayer que, avoir plusieurs threads courants semble toujours avoir de la difficulté ... j'accepterais votre réponse, mais l'autre réponse ici semble répondre à la question que je demandais même si je me rendais compte que je devrais mettre en œuvre ma gestion de thread à l'aide de l'activité Android. Méthodes de cycle de vie différemment ...



19
votes

de la réponse de Christian à Cette question : XXX

Cependant, Jake Basile a raison. Sauf si vous avez une raison probable de faire quelque chose de spécial lorsque vous appuyez sur le bouton d'alimentation, vous devez utiliser des fonctions standard de cycle de vie Android.

Lorsque vous appuyez sur le bouton d'alimentation, il appelle la méthode Onpause () de votre application, et lorsque vous déverrouillez le périphérique, il appellera OnResume (). C'est ici que vous devriez gérer votre fil pour empêcher l'application de se bloquer.

Le La documentation sur l'activité vous donnera une description détaillée des fonctions de cycle de vie, quand elles sont appelées et comment vous devriez les utiliser. Entrez la description de l'image ici


2 commentaires

Peux-tu être plus précis? Qu'est-ce que vous essayez de faire exactement?


À Kitkat, je viens de remarquer que cliquer sur le bouton d'alimentation appelle maintenant surtop () !!! C'est un gros changement, jamais l'habitude d'être comme ça.



1
votes

Pour détecter si une application Android commence ou s'arrête, vous pouvez utiliser ces règles ( référence ):

  • Lorsque l'utilisateur est entré, onResume est toujours appelé (sur l'activité qui sera à jour)
  • Lorsque l'utilisateur quitte l'utilisateur, OnStop est toujours appelé (sur l'activité actuelle), sauf lorsque vous appuyez sur la touche POWER (pour éteindre) où vous êtes May voir un appel de l'onpause.
  • Lorsque l'utilisateur se déplace entre les activités, onResume est toujours appelé sur la nouvelle activité et OnStop est toujours appelé l'ancien. L'appel ONRESUME est toujours avant que STEPO

2 commentaires

@ Jean-François Fabre Avez-vous ressenti le lien que j'ai inclus n'était pas inutile? Il fournit les preuves de la réponse que j'ai donnée et plus de détails donc j'espérais que c'était utile.


Je l'ai supprimé car les liens à la fin des réponses (spécialement sur un blog) sont considérés comme des spams limites



2
votes

Beaucoup de réponses à cette question ignorent le fait que lors de la rédaction d'une application, il est important de savoir quel événement a provoqué une fonction de cycle de vie androide standard en particulier. Il y a une fonction surbackprimé (); Pourquoi ne pas avoir un utile () et onhomeprimé () également? Les applications ont souvent besoin de faire différentes choses dans les fonctions de cycle de vie standard en fonction de l'événement qui les a provoquées. À l'heure actuelle, il s'agit d'une réelle douleur de déterminer si une méthode de cycle de vie standard a été appelée à la suite d'une touche à domicile ou d'un bouton d'alimentation Appuyez sur.


0 commentaires

0
votes

remplacer les méthodes de cycle de vie. La solution pour détecter le pressage du bouton d'alimentation choisie car la réponse n'est plus autorisée dans Android ()


0 commentaires