私のアプリでは、クリックすると音楽を再生している他のすべてのアプリを停止するボタンを作成しようとしています。私が欲しいのは、ある音楽プレーヤーで音楽を再生していて、別の音楽プレーヤーで他の音楽を再生しようとすると、現在の音楽プレーヤーが停止してから2番目の音楽プレーヤーが開始するのと似ています。現在のアクティビティ/アプリから音楽を再生している他のアプリを停止するにはどうすればよいですか?
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;
}
}
};
こちらのドキュメントにあるメディアプレーヤーのオーディオフォーカスの実装を使用する必要があります。
http://developer.Android.com/guide/topics/media/mediaplayer.html#audiofocus