放弃音频焦点不会恢复其他应用的音乐流

时间:2017-02-28 19:55:53

标签: android audio android-audiomanager audio-player android-music-player

我正在开发一款允许用户观看视频的应用。当他们打开要观看的视频时,我打电话给:

AudioManager mAudioManager = (AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

这会停止当时任何其他应用流媒体音乐的播放。我已经使用Play Music,Spotify,Soundcloud等进行了测试,此时它们都会停止播放音乐。

当用户观看视频时,我会致电

mAudioManager.abandonAudioFocus(this);

但是正在播放音乐且之前暂停的应用无法恢复流媒体音乐。我怎样才能让它发挥作用?

我尝试过AUDIOFOCUS_GAINAUDIOFOCUS_GAIN_TRANSIENT。我在Stack Overflow上阅读的所有内容都说我只需要释放音频管理器。这看起来很简单,但我无法弄清楚。我希望这些功能类似于Instagram在观看视频时暂停和恢复音乐的方式。

1 个答案:

答案 0 :(得分:0)

当您请求完整的“ AUDIO_FOCUS”时,外部应用程序必须按“播放”按钮以请求返回“ AUDIO_FOCUS”。仅仅因为您的应用程序已经获得了“ AUDIO_FOCUS”,然后又放弃了它,所以这不会恢复之前播放的音乐/视频。

克服此问题的唯一方法是重新考虑应用程序的需求。因此,您可以请求临时的音频焦点,即AudioManager.AUDIOFOCUS_GAIN_TRANSIENT(或AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_CAN_DUCK,具体取决于您是否认为可以让其他音频在较低的音量下继续在后台播放)。

int requestAudioFocusResult = audioManager.requestAudioFocus(TimeWhisperService.this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
if(requestAudioFocusResult == AudioManager.AUDIOFOCUS_GAIN) {
    //ACCESS GRANTED
}