2010-07-12 5 views
5

Je veux être en mesure de capturer des événements clés dans un service que j'écris. Je peux le faire à l'intérieur d'une activité sans problèmes, mais toutes mes tentatives pour obtenir ce travail dans un service ont échoué. La touche que je voulais capturer (globalement) est le bouton BACK, mais si ce n'est pas possible, n'importe quel bouton (matériel) d'une HTC Desire serait OK.Comment capturer des événements clés dans un service?

+0

Pourquoi voulez-vous capturer dans un 'Service'? – Macarse

+0

Premièrement: Je suis nouveau à la programmation android et je pensais qu'une activité ne reçoit KeyEvents que lorsqu'elle a un focus. Si ce n'est pas le cas, je n'ai pas strictement besoin d'un service. Ce que je veux faire est d'écrire une application qui peut désactiver le verrouillage de l'écran qui a été activé par le capteur de proximité lors d'un appel. Ceci est nécessaire parce que le HTC Desire 'oublie' parfois de réactiver l'écran correctement. Je voulais le faire quand on appuie sur n'importe quel bouton (pour pouvoir raccrocher sans avoir à retirer la batterie;)). – user388759

Répondre

1

Oui, les activités d'Android ne reçoivent que KeyEvents lorsqu'elles sont ciblées. La seule façon de capturer "globalement" une pression sur un bouton arrière est de créer un InputMethod afin que vous puissiez intercepter les événements de clé dure. Rappelez-vous que l'utilisation de votre propre InputMethod ne vous permettra pas d'utiliser des claviers personnalisés comme Swiftkey par exemple.

Avez-vous essayé d'atteindre HTC sur ce problème?

+0

Ce n'est pas mon appareil (j'ai un Samsung Galaxy I9000 - qui a ses propres problèmes;)) mais celui d'un de mes amis. Il a cherché sur certains forums, trouvé des personnes ayant le même problème mais aucune solution jusqu'à présent (je ne sais pas s'il a contacté HTC). Mais après qu'Android soit ouvert pour que nous puissions résoudre les problèmes que nous rencontrons (c'est ce que je pensais), l'idée était de faire exactement cela. ;) – user388759

1

Un service n'a pas d'interface utilisateur et ne reçoit aucune entrée de l'utilisateur.

Maintenant, si vous aviez une activité qui gérait le service, vous pourriez faire en sorte que le service fasse quelque chose de spécial lorsque la touche de retour a été enfoncée pendant votre activité.

1

Vous pouvez diffuser keyEvent à partir de framework et gérer la diffusion dans votre service. Mais vous devez changer le code dans le cadre pour cela.

Questions connexes