1

我正在创建一个音乐播放器应用程序。

我想:

  1. 当用户使用我的应用播放歌曲时,默认音乐播放器应该停止(正在播放)
  2. 如果其他应用程序在我的应用程序已经在播放时开始播放,那么我的应用程序应该停止播放。

我可以使用Audio Focus解决第一点。但是对于第二点,即处理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;
}

到目前为止,我的第二点代码:

//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

第一个参数requestAudioFocus是一个OnAudioFocusChangeListener实例。你现在正在路过null。假设您已经实现reqAudioFocus并且onAudioFocusChanged在同一个类上,传递this而不是null应该足够了。

于 2012-08-07T06:05:10.847 回答