Android 停止来自其他应用程序的音乐

Android 停止来自其他应用程序的音乐,android,android-mediaplayer,android-audiomanager,Android,Android Mediaplayer,Android Audiomanager,如果在后台,默认音乐播放器正在运行,并且如果我使用我的应用程序播放音乐,则两者同时运行 有没有办法停止背景音乐播放器。您必须实现Mediaplayer的AudioFocus。为此,您需要获取AudioManager的一个实例。拥有该实例后,就可以使用requestAudioFocus AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); // Request audio focus for pla

如果在后台,默认音乐播放器正在运行,并且如果我使用我的应用程序播放音乐,则两者同时运行


有没有办法停止背景音乐播放器。

您必须实现Mediaplayer的
AudioFocus
。为此,您需要获取
AudioManager的一个实例。拥有该实例后,就可以使用
requestAudioFocus

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

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        Log.d("AudioFocus", "Audio focus received");
        return true;
    } else {
        Log.d("AudioFocus", "Audio focus NOT received");
        return false;
    }
}
AudioFocus
分配给每个请求它的应用程序。当你的应用程序接收到焦点时,它可以传递一个
AudioManager.OnAudioFocusChangeListener
,当焦点发生变化时提供回调

如果应用程序获得音频焦点,而另一个应用程序请求音频焦点,则该焦点将提供给另一个应用程序。Android将通过一个
OnAudioFocusChangeListener
通知您的应用程序,以便您的应用程序能够响应更改。要接收焦点事件,您需要像下面这样传递一个
AudioManager.onaudiofocuschangeelistener的实例

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

                           case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) :
                           // Lower the volume while ducking.
                           mediaPlayer.setVolume(0.2f, 0.2f);
                           break;
                           case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
                           pause();
                           break;

                           case (AudioManager.AUDIOFOCUS_LOSS) :
                           stop();
                           ComponentName component =new ComponentName(AudioPlayerActivity.this,MediaControlReceiver.class);
                           am.unregisterMediaButtonEventReceiver(component);
                           break;

                           case (AudioManager.AUDIOFOCUS_GAIN) :
                           // Return the volume to normal and resume if paused.
                           mediaPlayer.setVolume(1f, 1f);
                           mediaPlayer.start();
                           break;
                           default: break;
}
}
};

参考文档:

谢谢Abhi,现在我可以停止音乐,但无法继续。其他应用程序必须请求音频焦点。那份申请会被批准的,我不明白你想说什么,你要这样理解。您的应用程序已实现AudioFocus。因此,当你的应用程序启动时,音频焦点被授予,所有其他声音停止。类似地,如果任何其他应用在启动时实现了
AudioFocus
,则将播放其声音,并且所有其他声音将停止。因此,其他应用程序必须请求音频焦点。这意味着,如果其他应用程序未实现音频焦点,则不应恢复。