音楽プレーヤーアプリを作成しています。
その中で、アプリケーションが AudioFocus を失ったかどうかを確認していると、再生が停止します。しかし、これは、トラックを再生してから停止してから再度トラックを再生するswitch case AudioManager.AUDIOFOCUS_LOSS
と、フォーカスが失われているためにプレーヤーを停止したときに呼び出されるという 1 つの問題を引き起こしています。
そのため、自分のアプリはそれ自体にフォーカスを失っています。明らかに、これらは私の意図ではありませんでした。他の音楽プレーヤーがフォーカスを要求したときに呼び出されるようにしたかったのです。
private OnAudioFocusChangeListener focusChangeListener = new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
if (mPlayer.isPlaying()) {
stopPlayback();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (mPlayer.isPlaying()) {
mPlayer.pause();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
if (!mPlayer.isPlaying()) {
initiatePlayback();
}
break;
}
}
};
もう 1 つ問題があります。取得していた例外は ですIllegalStateException
。
これは、コードが内部に到達したときにcase AudioManager.AUDIOFOCUS_LOSS
、私の音楽プレーヤーが何らかのエラー状態にあることを意味します。それを確認するために、次OnErrorListener
を使用して登録しました:
//Inside Service - onCreate() Method
mPlayer.setOnErrorListener(mErrorListener);
しかし、このリスナーが呼び出されることはありません。どんな助けにも感謝します。