2014-06-29 151 views
4

在我的應用程序,我有一個媒體播放器,播放流媒體音樂:停止的MediaPlayer當其他應用程序播放音樂

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),我的應用不會停止音樂,並且在同一時間有兩種聲音。

所以我想讓我的音樂停止,如果其他應用程序需要播放音樂。

非常感謝

回答

5

你應該使用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 
    } 
} 
+0

感謝您的回答,但如果我這樣做,當我打開另一個應用程序時,音樂會停止? – Tartempion34

+0

@ Tartempion34我在我的項目中實現了它,它正在工作。所有玩家/應用都應該請求音頻專注於他們嘗試用於輸出的流,以避免像在同一個流上產生輸出的多個應用一樣發生情況。當我打開我的播放器時,Google音樂暫停/停止,當我開始在Google音樂上播放時,播放器會暫停。我使用服務來控制媒體播放。 –

+0

好的,謝謝你的幫助 – Tartempion34

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

這是唯一可以阻止來自其他應用的音樂的解決方案。 –

相關問題