2013-03-13 3 views
14

私のアプリケーションでは、クリックすると音楽を再生している他のすべてのアプリケーションを停止するボタンを作ろうとしています。私が望むのは、1人の音楽プレーヤーで音楽を再生していて、2番目の音楽プレーヤーで他の音楽を再生しようとすると、現在の音楽プレーヤーが停止してから2番目の音楽プレーヤーが起動します。現在のアクティビティ/アプリから音楽を再生する他のアプリを停止するにはどうすればよいですか?現在のアクティビティから音楽を再生している他のアプリを停止するにはどうすればよいですか?

答えて

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

オーディオフォーカスはそれを要求し、各アプリケーションに順番に割り当てられます。これは、別の アプリケーションがオーディオフォーカスを要求する場合、を意味し、アプリケーションはそれを失います。あなたはオーディオフォーカスの変更リスナーのonAudioFocusChangeハンドラを介して

 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

非常に素晴らしく、詳細な回答をオーディオフォーカスを要求するときに登録 オーディオフォーカスの損失のお知らせ機能編となります。 –

+0

ここにMediaControlReceiver.classクラスは何ですか? –

関連する問題