音楽プレーヤーアプリを作成しています。
私が欲しい:
- ユーザーがアプリを使用して曲を再生すると、デフォルトの音楽プレーヤーが停止する (再生中)
- そして、私のアプリがすでに再生されているときに他のアプリケーションの再生が開始された場合、私のアプリは停止するはずです。
Audio Focusを使用して、最初のポイントを解決できます。しかし、2番目のポイント、つまり処理AUDIOFOCUS_LOSS
については、いくつかの問題に直面しています。
問題: ドキュメントに従っていますが、AudioFocus が失われたことを検出するには、音楽プレーヤー サービスを登録する方法を教えてください。
最初のポイントのコードは次のとおりです。
if (reqAudioFocus()) {
mPlayer.start();
}
private boolean reqAudioFocus() {
boolean gotFocus = false;
int audioFocus = am.requestAudioFocus(null, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
if (audioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
gotFocus = true;
} else {
gotFocus = false;
}
return gotFocus;
}
2番目のポイントについては、これまでの私のコード:
//Class implements OnAudioFocusChangeListener
@Override
public void onAudioFocusChange(int focusChange) {
/*
* TODO : Call stopService/onDestroy() method. Pause the track; Change
* the Play/Pause icon; save the track postion for seekTo() method.
*/
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
// TODO: Pause playback
if (mPlayer.isPlaying()) {
mPlayer.pause();
}
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// TODO: Resume Playback
if (!mPlayer.isPlaying()) {
mPlayer.start();
}
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
// TODO: stop playback.
// am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
am.abandonAudioFocus(afChangeListener);
}
}
onAudioFocusChange()
アプリがオーディオ フォーカスを失ったときにアプリケーションを呼び出す方法を次に示します。
ありがとう