2013-03-13 64 views
14

在我的應用程序中,我試圖製作一個按鈕,點擊時會停止播放音樂的所有其他應用程序。我想要的是,如果我通過一個音樂播放器播放音樂,並且如果我嘗試通過另一個音樂播放器播放其他音樂,則當前音樂播放器停止,然後第二個音樂播放器開始播放。我們如何阻止其他應用程序播放當前活動/應用程序中的音樂?如何阻止其他應用程序播放當前活動中的音樂?

回答

33
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) { 
// other app had stopped playing song now , so u can do u stuff now . 
} 

音頻焦點依次分配給每個請求它應用。這意味着如果另一個 應用程序請求音頻焦點,您的應用程序將失去它。請求將音頻

 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; 
} 
} 
}; 
+1

非常好,詳細的解答時,您將成爲 音頻焦點損失的通知作業人員ED通過音頻焦點變化監聽的onAudioFocusChange處理你 註冊。 – 2013-11-01 03:19:12

+0

什麼是MediaControlReceiver.class類? – 2017-02-22 14:36:42

相關問題