1

音楽プレーヤーアプリを作成しています。

私が欲しい:

  1. ユーザーがアプリを使用して曲を再生すると、デフォルトの音楽プレーヤーが停止する (再生中)
  2. そして、私のアプリがすでに再生されているときに他のアプリケーションの再生が開始された場合、私のアプリは停止するはずです。

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()アプリがオーディオ フォーカスを失ったときにアプリケーションを呼び出す方法を次に示します。

ありがとう

4

1 に答える 1

1

の最初の引数requestAudioFocusOnAudioFocusChangeListenerインスタンスです。あなたはnull今通り過ぎています。reqAudioFocusとを同じクラスに実装したと仮定すると、代わりにonAudioFocusChanged渡すだけで十分です。thisnull

于 2012-08-07T06:05:10.847 に答える