2013-03-13 25 views
14

Trong ứng dụng của tôi, tôi đang cố gắng thực hiện một nút mà khi nhấp vào dừng tất cả các ứng dụng khác đang phát nhạc. Những gì tôi muốn là tương tự như vậy nếu tôi đang chơi nhạc thông qua một máy nghe nhạc và nếu tôi thử chơi một số nhạc khác thông qua một máy nghe nhạc thứ hai, máy nghe nhạc hiện tại dừng lại và sau đó thứ hai bắt đầu. Làm cách nào để chúng tôi dừng các ứng dụng khác phát nhạc từ hoạt động/ứng dụng hiện tại?Cách dừng các ứng dụng khác phát nhạc từ hoạt động hiện tại của tôi?

Trả lời

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 . 
} 

âm thanh tập trung được gán lần lượt để từng ứng dụng mà yêu cầu nó. Điều này có nghĩa là nếu khác yêu cầu ứng dụng tập trung âm thanh, ứng dụng của bạn sẽ mất nó. Bạn sẽ có ed notifi của sự mất mát của tập trung âm thanh thông qua việc xử lý onAudioFocusChange của âm thanh Focus Thay đổi Listener bạn đăng ký khi yêu cầu tập trung âm thanh

 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

câu trả lời rất đẹp và chi tiết. –

+0

lớp MediaControlReceiver.class ở đây là gì? –

Các vấn đề liên quan