Est-il une émission d'action pour les changements de volume?
Je suis de la programmation d'un petit widget qui doit être mis à jour chaque fois que l'utilisateur modifie le volume de la sonnerie ou le vibreur paramètres.
Capture android.media.VIBRATE_SETTING_CHANGED
fonctionne très bien pour le vibrer les paramètres, mais je n'ai trouvé aucun moyen de se notifié lorsque le volume de la sonnerie change et bien que je pourrais essayer de capturer lorsque l'utilisateur appuie sur le réglage du volume touches physiques, il existe de nombreuses autres options pour changer le volume sans l'aide de ces touches.
Savez-vous si il y a la diffusion d'action défini pour cette ou de toute façon à créer un ou de résoudre le problème sans elle?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de diffusion de l'action, mais je n'ai trouver que vous pouvez raccorder un contenu observateur averti lorsque la modification des paramètres, le volume des flux de certains de ces paramètres. S'inscrire pour le android.fournisseur de.Les paramètres.Système.CONTENT_URI pour être informé de toutes les modifications de paramètres:
Le contenu de l'observateur pourrait ressembler à quelque chose comme ceci:
Et assurez-vous d'annuler l'inscription du contenu de l'observateur à un certain point.
Settings.System.getUriFor("music_volume")
. Il fonctionne sous Android 4.4. Je pense aussi qu'il va travailler pour d'autres flux audio types, tels que les sonneries, les notifications, etc.Nathan code fonctionne, mais donne deux notifications pour chaque modification des paramètres système. Pour éviter cela, utilisez la commande suivante
Puis dans votre service onCreate de l'enregistrer avec:
Puis annuler l'inscription dans onDestroy:
Oui, vous pouvez enregistrer un récepteur pour un changement de volume(c'est une sorte de hack, mais qui fonctionne), j'ai réussi à le faire de cette façon (n'implique pas une ContentObserver):
Dans le fichier manifeste xml:
BroadcastReceiver:
espère que cela aide!
Fondée en Nathan, adi et swooby du code j'ai créé un plein qui travaillent par exemple avec quelques améliorations mineures.
À la recherche de la
AudioFragment
classe, nous pouvons voir combien il est facile de écouter les changements de volume avec notre coutumeContentObserver
.Espère que c'est toujours utile pour quelqu'un! 🙂
onAudioVolumeChanged()
). L'accolade de fermeture aprèsmaxVolume
doit être placé après la valeur100
. Donc:(int)((float) currentVolume / maxVolume * 100)
à la place. Sinon, vous obtiendrez toujours de 0% (sicurrentVolume
!=maxVolume
) ou 100% (sicurrentVolume
==maxVolume
) pour le pourcentage de volume. J'ai pris la liberté de corriger l'article, j'espère que vous n'avez pas l'esprit...AudioVolumeObserver
s extrait. Le commentaire dit "avec ce gestionnaire AudioVolumeContentObserver#onChange() sera exécuté dans le thread principal", maisnew Handler()
est utilisé, il va en fait utiliser la même méthode de filregister(...)
est appelée.new Handler()
qui crée un gestionnaire pour le thread courant du looper (comme vous pouvez le lire dans l'autre, DONC la réponse que je référence dans les commentaires).De Nathan et dja code fonctionne, mais peut être nettoyé et autonome pour:
Salut, j'ai essayé le code ci-dessus et il ne fonctionne pas pour moi. Mais quand j'ai essayé d'ajouter cette ligne
et mettre
Cela fonctionne maintenant. Ma préoccupation est de savoir comment cacher la fenêtre de volume onchange. Voir ce image.
Si c'est uniquement la sonnerie de changement de mode que vous pouvez utiliser qu'il est diffusé récepteur avec "
android.media.RINGER_MODE_CHANGED
" comme action. Il sera facile à mettre en œuvre100% façon de travailler dans tous les cas