2014-07-12 100 views

回答

6

這個概念在Android中被稱爲音頻焦點

從廣義上講,這意味着只有一個應用程序可以在一個時間點擁有音頻焦點,並且如果要求它應該放棄(例如,如果電話到達或其他應用程序想要播放音樂, c)。

爲此,您需要註冊一個OnAudioFocusChangeListener

基本上,你必須:在開始播放前

  • 請求音頻焦點。
  • 只有在有效獲取時纔開始播放。
  • 停止播放時放棄焦點。
  • 通過暫時降低音量(「避免」)或完全停止播放處理音頻聚焦丟失。

請檢查Android文檔中的Managing Audio Focus文章。

+0

謝謝墊。這真的幫助了我。 –

6

這就是我解決問題的方法。

實施OnAudioFocusChangeListener listener

初始化AudioManager

private AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

請求音頻焦點

mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, 
       AudioManager.AUDIOFOCUS_GAIN); 

@Overide的OnAudioFocusChangeListener

以下的方法
public void onAudioFocusChange(int focusChange) 
{ 
    switch (focusChange) 
    { 
    case AudioManager.AUDIOFOCUS_GAIN: 
    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: 
     resumePlayer(); // Resume your media player here 
     break; 
    case AudioManager.AUDIOFOCUS_LOSS: 
    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: 
     pausePlayer();// Pause your media player here 
     break; 
    } 
} 
+0

感謝Umass,它爲我工作! –

0
private boolean reqAudioFocus() { 
     boolean gotFocus = false; 
     int audioFocus = am.requestAudioFocus(this, AudioManager.STREAM_MUSIC, 
       AudioManager.AUDIOFOCUS_GAIN); 
     if (audioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
      gotFocus = true; 
     } else { 
      gotFocus = false; 
     } 
     return gotFocus; 
    } 

這將請求音頻焦點,當你啓動應用程序和其他音樂應用程序已經在運行。所以這將停止已經運行的應用程序,並開始你的。

if (reqAudioFocus()) { 

      mPlayer.prepareAsync(); 
     } 

粘貼這個你想準備你的mediaplayer的地方。

對於其他方式輪即當其他應用程序播放

使用

public void onAudioFocusChange(int focusChange) { 

     if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
      am.abandonAudioFocus(this); 
      mPlayer.stop(); 


     } 

    } 

其中「我」是你的AudioManager實例您的應用程序應該停止。

不要忘記實現AudioManager。OnAudioFocusChangeListener

相關問題