我的应用程序偶尔会通过TextToSpeech或使用MediaPlayer发布简短的声明.如果某些应用程序使用MediaPlayer可能在后台运行其他音乐,我想暂停这段音乐片刻,然后在我宣布恢复播放“背景音乐”之后.
有办法吗?
解决方法:
如果您可以定位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设备上的内置媒体播放器很好地配合(三星galaxy S Wi-Fi和HTC Wildfire.)我没有广泛尝试过与其他音乐播放应用程序,但它绝对有效至少和Spotify一样,是正确做你想做的事情的官方方式.
请注意,当您调用abandonAudioFocus()时,您需要自己解决,因为大多数声音是异步播放的.幸运的是,MediaPlayer和TextToSpeech都提供了回调机制,因此当他们完成播放声音时,它们可以为您提供刺激(SoundPool不是这样,因此使用音频焦点会更烦人.)