如何将我的音乐播放器应用程序注册到OnAudioFocusChangeListener

时间:2012-08-07 05:26:54

标签: java android android-audiomanager

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

我想:

  1. 当用户使用我的应用播放歌曲时,默认音乐播放器应该停止(正在播放)
  2. 如果其他应用程序在我的应用程序已经播放时开始播放,则应该停止播放。
  3. 我可以使用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);
        }
    
    }
    

    现在,当app失去音频焦点时,如何让我的应用程序调用{​​{1}}。

    由于

1 个答案:

答案 0 :(得分:1)

requestAudioFocus的第一个参数是OnAudioFocusChangeListener个实例。你现在正在通过null。假设您在同一个班级上实施了reqAudioFocusonAudioFocusChanged,那么传递this代替null就足够了。