当其他应用播放音乐时停止MediaPlayer

时间:2014-06-29 09:50:11

标签: android

在我的应用中,我有一个播放流音乐的媒体播放器:

globalVariable.setPlaying(true);
final ProgressDialog mProgressDialog;
mProgressDialog = ProgressDialog.show(MainActivity.this, "Chargement en cours", "La musique est en train de charger", true);

String url = "http://178.32.181.86:18000";
globalVariable.mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

try {
    globalVariable.mp.setDataSource(url);
} catch (IOException e) {
    e.printStackTrace();
}

globalVariable.mp.prepareAsync();

globalVariable.mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
           mp.start();
           bouton.setImageResource(R.drawable.pause);
           mProgressDialog.hide();
    }
});

它非常好用。当我在我面前打开另一个应用程序时,玩家继续,这很棒。但是,如果我启动另一个播放器(如GooglePlayMusic或youtube),我的应用程序不会停止音乐,同时我有两个声音。

所以我希望如果另一个应用需要播放音乐,我的音乐会停止。

非常感谢

2 个答案:

答案 0 :(得分:6)

您应该使用AudioManager服务来接收是否收到/丢失音频焦点(Managing audio focus)的通知。我在一个项目中做了类似的事情,当我的应用程序开始播放时,Google Play暂停,反之亦然。在控制媒体播放的地方使用以下代码,如(活动或服务) -

// Add this code in a method

AudioManager am = null;

// Request focus for music stream and pass AudioManager.OnAudioFocusChangeListener
// implementation reference
int result = am.requestAudioFocus(this, AudioManager.STREAM_MUSIC, 
                AudioManager.AUDIOFOCUS_GAIN);

if(result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED)
{
    // Play
}

// Implements AudioManager.OnAudioFocusChangeListener

@Override
public void onAudioFocusChange(int focusChange) 
{
    if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT)
    {
        // Pause
    }
    else if(focusChange == AudioManager.AUDIOFOCUS_GAIN)
    {
        // Resume
    }
    else if(focusChange == AudioManager.AUDIOFOCUS_LOSS)
    {
        // Stop or pause depending on your need
    }
}

答案 1 :(得分:2)

AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
if(manager.isMusicActive())
 {
     // do something - or don't
 }