Question

Salut je suis nouveau à ce sujet. Mon projet d'auto-enseignement est une petite application qui joue un flux de nouvelles audio. Pour être efficace, l'application a vraiment besoin d'interrompre les lecteurs multimédia en cours de lecture (par exemple: Last FM, Imeem, lecteur de musique, Spotify, etc.).

Je ne sais pas ce qui va jouer ou quelle application va jouer, mais je veux leur demander tout de faire une pause jusqu'à ce que je l'ai fait. Sons plutôt gras, je sais, mais il doit être possible, parce que quand il y a un appel entrant, qui est essentiellement ce qui se passe.

Puis-je envoyer un message à tous les lecteurs audio pour leur demander de faire une pause pour un moment? Pourrais-je usurper un appel entrant, juste pour le temps qu'il faut?

Merci.

Était-ce utile?

La solution

Audio sur Android traitement va être assez horrible pendant un certain temps. Les API sont assez bizarres, mal documentés, et ne cessent de changer / dévalorisant / rupture entre les versions. Même le code AudioManager a FIXMEs en elle.

Quoi qu'il en soit, il existe plusieurs types de flux dans Android (musique, les notifications, les appels téléphoniques, etc.) et les applications sont destinées à choisir celui qui convient pour la lecture. J'imagine que la majorité des applications Android devrait utiliser le type de musique / média (STREAM_TYPE_MUSIC). Vous définissez cela sur votre MediaPlayer en utilisant la méthode setAudioStreamType.

Le SDK ne vous permet de définir un seul flux type en solo - causant tous les autres cours d'eau pour être mis en sourdine - mais je ne crois pas que vous pouvez identifier l'audio en cours de lecture par des applications particulières et en quelque sorte une pause / réactivez il. applications de musique en général utiliseront le PhoneStateListener pour se mettre en pause lorsque vous recevez un appel.

Dans votre cas, vous pouvez « emprunter » le flux d'appel téléphonique pour votre MediaPlayer et utiliser l'appel de méthode AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) lorsque la lecture commence, puis de solo le flux avec false lorsque la lecture ou votre Activity est fait.

Je peux vous dire que cela fonctionne, mais je ne me souviens pas désinvolture que vous devez définir également l'audio mode à MODE_IN_CALL lors de l'utilisation du flux d'appel vocal (comme ceci: AudioManager.setMode(AudioManager.MODE_IN_CALL)). Si vous trouvez ce qui est nécessaire, alors vous devez vous assurer que vous revenez au mode MODE_NORMAL une fois la lecture terminée, sinon chaque fois que vous appuyez sur les touches de volume dur, il va dire « en cours d'appel volume »! Toutefois, si et quand vous voulez revenir à MODE_NORMAL, vous devez vérifier qu'un véritable appel téléphonique ne se produit pas à ce moment-là ...

Peut-être que vous pourriez utiliser un autre type de flux plutôt que l'appel vocal, mais je ne fais que parler de l'expérience de travail sur une application qui pourrait utiliser le haut-parleur ou l'écouteur pour la lecture audio, qui oblige l'utilisation du flux d'appel vocal.

Comme je l'ai dit, le traitement audio est pas particulièrement amusant ...;)

Autres conseils

Il a été 2 ans. Mais j'espère que cela pourrait aider quelqu'un:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);

Remarque: si vous appelez setStreamMute (int, boolean) pour couper le flux n fois, vous devez appeler n fois à nouveau pour rétablir le son (utilisation false).

Vous pouvez AudioManager.adjustVolume procédé :

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top