Comment capturer les événements clés du casque Bluetooth avec Android
Mon application peut être contrôlée par rapport à la normale de l'oreillette. Simplement, il remplace "onKeyDown". Mais des événements clés de l'oreillette bluetooth ne sont pas capturées - pourquoi? Ou comment capturer une clé bluetooth événements?
le "journal de chat" est le suivant si je presse le bouton sur le casque:
Bluetooth AT recv(3043): AT+VGS=15
AudioPolicyManagerBase(13654): FM radio recording off
AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel.
VolumePanel(2261): change volume by MSG_VOLUME_CHANGED
VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0)
VolumePanel(2261): Call setChangeSeekbarColor(false)
j'ai aussi essayé de manipuler les supports actions de bouton, mais ce n'est pas de travail. mon idée est gratuit et configurable de mappage de touches: l'utilisateur choisit "touche set" mon application entend sur toutes les touches (matériel, des médias, des boutons, oreillette bluetooth), puis l'utilisateur appuie sur une touche et l'événement, le code de la clé est stockée dans le fichier config.
Summerizing ne fonctionne pas les Réponses:
Les boutons de Volume doivent être capturées par "VOLUME_CHANGED_ACTION". Ce problème est que les intentions sont diffusées à d'autres applications et abortBroadcast() ne fonctionne pas (il ne fonctionne que pour "commandé" des Émissions). Un autre problème est que les touches sur le câble du casque et sur le téléphone déclencher onReceive() deux fois (pourquoi?) le casque d'écoute bluetooth déclencher qu'une seule fois.
Le Problème suivant est le 3e clé sur oreillette Bluetooth. Il déclenche la voix de commande (s-voice démarre sur s3), j'ai essayé de capturer beaucoup de différentes intentions à ce sujet mais je ne peux pas "recevoir" ce bouton presse et je ne sais pas pourquoi.
À la fin, je veux capturer tous les types de boutons et ne voulez pas les manipulés par d'autres applications (comme l'utilisation de onKeyDown et renvoyer true).
source d'informationauteur dermoritz
Vous devez vous connecter pour publier un commentaire.
Ajouter une diffusion auditeur à
MEDIA_BUTTON
:Vous devez enregistrer votre récepteur de radiodiffusion à l'intérieur de votre application (et non dans le fichier de manifeste). Sinon, Google Music player va attraper votre diffusion et à bord.
Votre
IntentFilter
la priorité devrait être plus élevé que d'autres acteurs des médias, les priorités dans votre téléphone)Ajouter
android.permission.BLUETOOTH
autorisation dans le manifeste de casque de Bluetooth de soutienAprès avoir reçu votre clé que vous avez manuellement interrompre la diffusion à l'aide de
abortBroadcast()
.Cependant priorités et
abortBroadcast()
fonctionne bien aussi longtemps que chaque application ne répond alors quepar exemple, quelque chose est joué.
Mais plusieurs utilisateurs s'attendent également à une "lecteur par défaut" d'être lancé (ou de commencer à jouer) sur le bouton de presse, comme le lecteur par défaut, donc il se peut que certains d'application avec une priorité supérieure ne laissera pas l'intention de venir par le biais de votre application
Dans le
onReceive
vous pouvez obtenir le bouton de l'événement aveckey.getKeyAction()
vous indique si le relâchement de la touche ou enfoncée,key.getKeyCode()
indique quel bouton est pressé.Si vous souhaitez gérer seul bouton de câble des écouteurs ainsi, aussi
concernant le code de la clé
KEYCODE_HEADSETHOOK
Remplacer la
onKeyDown
méthode à toute activité et vérifierle
KeyEvent.KEYCODE_MEDIA_KEYCODE_pressed_key
par exemple
Touche de Volume d'intégration exemple
Android - Boutons de Volume utilisé dans mon application
Ce dont on peut avoir besoin de l'autorisation
Ou vous pouvez essayer slimier implémentations sur le lien suivant
Développeur Android Blog : Manipulation des boutons de contrôle à distance
Android Contes : Ajouter un bouton du Casque de soutien à votre application Android
Découvrez cet article. Il explique comment mettre en place quelque chose de similaire à l'aide de media actions de bouton.
Je sais que vous avez mentionné que vous avez parcouru ce chemin, sans succès, toujours de lui donner un essai. Point votre attention aux pièges liés à l'inscription récepteur de radiodiffusion, paramètre filtre d'intention des priorités et de l'ajout d'autorisations (tout est expliqué dans l'article).
Espère que cela aidera.
Si vous essayez d'écouter ce à partir d'une activité, l'utilisation
onKeyDown()
et attraper leKEYCODE_MEDIA_PLAY_PAUSE
(KEYCODE_MEDIA_PLAY
etKEYCODE_MEDIA_PAUSE
post ICS) les principaux événements.Aussi pour le récepteur de radiodiffusion solution fonctionne, assurez-vous que il arent d'autres applications installés et en cours d'exécution en arrière-plan attraper ces événements qui peuvent avoir la priorité sur la vôtre.
Aussi regardez ceci: Android - l'enregistrement d'un casque bouton cliquez avec le BroadcastReceiver