Прерывание MediaPlayer - PullRequest
       1

Прерывание MediaPlayer

3 голосов
/ 17 июня 2011

Мое приложение время от времени делает короткое объявление, либо через TextToSpeech, либо используя MediaPlayer.Если какая-то другая музыка работает в фоновом режиме, возможно, в каком-то приложении, использующем MediaPlayer, я хотел бы на мгновение прервать эту музыку и после моего объявления возобновить воспроизведение "фоновой музыки".

Есть лиспособ сделать это?

Ответы [ 2 ]

5 голосов
/ 13 января 2012

Если вы можете использовать API уровня 8 и выше (Android 2.2), посмотрите на AudioManager , в частности requestAudioFocus() с AUDIOFOCUS_GAIN_TRANSIENT и AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKabandonAudioFocus().

Они дают подсказки воспроизводимому в данный момент музыкальному потоку, что ваше приложение хотело бы воспроизвести краткий звук.Если вы используете AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK с requestAudioFocus(), вы можете получить приятный эффект, когда уже воспроизводящаяся музыка приостанавливается, ваш звук воспроизводится, а затем воспроизводимая музыка снова возвращается, когда вы звоните abandonAudioFocus().

Это прекрасно работает со встроенными медиа-плеерами на устройствах 2.2, с которыми я пробовал (Samsung Galaxy S Wi-Fi и HTC Wildfire.) Я не пробовал это широко с другими приложениями для воспроизведения музыки, но он определенно работаетс Spotify, по крайней мере, и является официальным способом сделать именно то, что вы хотите.

Обратите внимание, что вам нужно решить для себя, когда вызывать abandonAudioFocus(), так как большинство звуков воспроизводятся асинхронно.К счастью, и MediaPlayer, и TextToSpeech предоставляют механизмы обратного вызова, чтобы они могли дать вам толчок, когда они закончили воспроизводить ваш звук (это не верно для SoundPool, так что это более раздражаетиспользовать аудио фокус с.)

0 голосов
/ 17 июня 2011

Я не думаю, что есть стандартный способ сделать это для каждого музыкального проигрывателя. По крайней мере, для музыкального плеера Android вы можете сделать:

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

Другой способ сделать это - установить громкость потока для типа «музыка» на 0 и воспроизвести ваше объявление на другом типе потока.

...