停止从其他应用程序启动的Mediaplayer

时间:2013-05-03 02:11:34

标签: android android-mediaplayer

Soundcloud等应用程序如何阻止其他应用程序的MediaPlayer?例如,当我通过Google音乐播放歌曲并打开SoundCloud时,一旦Soundcloud歌曲开始播放,Google Music的歌曲就会停止播放。我可能会遗漏一些显而易见的东西,但我一直想知道这是如何实现的。

谢谢, 贾斯汀

2 个答案:

答案 0 :(得分:5)

使用音频焦点。见Request the Audio Focus

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...

// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
                                 // Use the music stream.
                                 AudioManager.STREAM_MUSIC,
                                 // Request permanent focus.
                                 AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
    // Start playback.
}

答案 1 :(得分:1)

加入@ TCA的回答:

只有一个AudioManager。因此,音频焦点分配给每个请求逐个的应用程序。 这意味着如果另一个应用程序请求音频焦点,您的应用程序将丢失它。通过您在请求音频焦点时注册的音频焦点更改侦听器的onAudioFocusChange处理程序(在TCA的答案中 afChangeListener ),您将收到有关音频焦点丢失的通知。

private OnAudioFocusChangeListener focusChangeListener =
      new OnAudioFocusChangeListener() {
              public void onAudioFocusChange(int focusChange) {
                         AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
                switch (focusChange) {

                       case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
                       //Transient audio loss
                       break;

                       case (AudioManager.AUDIOFOCUS_LOSS) :
                       //Audio focus loss. Stop playback.
                       break;

                       case (AudioManager.AUDIOFOCUS_GAIN) :
                       //Audio focus gain. Start playback.
                       break;
                       default: break;
}
}
};