3 Stimmen

Unterbrechung des MediaPlayers

Meine Anwendung macht von Zeit zu Zeit eine kurze Ankündigung, entweder über TextToSpeech oder über die MediaPlayer . Wenn im Hintergrund eine andere Musik läuft, wahrscheinlich von einer Anwendung, die die MediaPlayer Ich möchte diese Musik für einen Moment unterbrechen und nach meiner Ankündigung die "Hintergrundmusik" weiter spielen lassen.

Gibt es eine Möglichkeit, dies zu tun?

5voto

Matt Gibson Punkte 37168

Wenn Sie API-Level 8 und höher (Android 2.2) anvisieren können, dann schauen Sie sich die AudioManager und zwar requestAudioFocus() mit AUDIOFOCUS_GAIN_TRANSIENT y AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK y abandonAudioFocus() .

Diese geben dem gerade abgespielten Musik-Stream Hinweise darauf, dass Ihre App einen kurzen Ton abspielen möchte. Wenn Sie AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK mit requestAudioFocus() können Sie einen schönen Effekt erzielen, bei dem die bereits laufende Musik pausiert, Ihr Ton abgespielt wird und die laufende Musik wieder eingeblendet wird, wenn Sie die abandonAudioFocus() .

Dies funktioniert gut mit den integrierten Media-Playern auf den 2.2-Geräten, mit denen ich es ausprobiert habe (Samsung Galaxy S Wi-Fi und HTC Wildfire). Ich habe es nicht ausgiebig mit anderen Musikwiedergabe-Apps ausprobiert, aber es funktioniert zumindest mit Spotify und ist der offizielle Weg, um genau das zu tun, was Sie tun möchten.

Beachten Sie, dass Sie selbst herausfinden müssen, wann Sie anrufen müssen abandonAudioFocus() da die meisten Töne asynchron abgespielt werden. Glücklicherweise können sowohl MediaPlayer y TextToSpeech Rückrufmechanismen bereitstellen, damit sie Ihnen einen Hinweis geben können, wenn sie mit der Wiedergabe Ihres Tons fertig sind (dies ist nicht in Bezug auf SoundPool Das ist also eher lästig, wenn man den Audio-Fokus verwenden will).

0voto

Vincent Mimoun-Prat Punkte 27570

Ich glaube nicht, dass es eine Standardmethode für alle Musikabspielgeräte gibt, die es gibt. Zumindest für den Android-Musikplayer könnte man das tun:

Intent i;
i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
context.sendBroadcast(i);

Eine andere Möglichkeit wäre, die Lautstärke des Streams für den Typ "Musik" auf 0 zu setzen und Ihre Ansage auf einem anderen Streamtyp abzuspielen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X