Если вы можете использовать API уровня 8 и выше (Android 2.2), посмотрите на AudioManager , в частности requestAudioFocus()
с AUDIOFOCUS_GAIN_TRANSIENT
и AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
,и abandonAudioFocus()
.
Они дают подсказки воспроизводимому в данный момент музыкальному потоку, что ваше приложение хотело бы воспроизвести краткий звук.Если вы используете AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
с requestAudioFocus()
, вы можете получить приятный эффект, когда уже воспроизводящаяся музыка приостанавливается, ваш звук воспроизводится, а затем воспроизводимая музыка снова возвращается, когда вы звоните abandonAudioFocus()
.
Это прекрасно работает со встроенными медиа-плеерами на устройствах 2.2, с которыми я пробовал (Samsung Galaxy S Wi-Fi и HTC Wildfire.) Я не пробовал это широко с другими приложениями для воспроизведения музыки, но он определенно работаетс Spotify, по крайней мере, и является официальным способом сделать именно то, что вы хотите.
Обратите внимание, что вам нужно решить для себя, когда вызывать abandonAudioFocus()
, так как большинство звуков воспроизводятся асинхронно.К счастью, и MediaPlayer
, и TextToSpeech
предоставляют механизмы обратного вызова, чтобы они могли дать вам толчок, когда они закончили воспроизводить ваш звук (это не верно для SoundPool
, так что это более раздражаетиспользовать аудио фокус с.)