Android--AudioManager.onAudioFocusChange()随机激发

Android--AudioManager.onAudioFocusChange()随机激发,android,android-audiomanager,Android,Android Audiomanager,我正在构建一个媒体播放器,并以一种类似于文档的方式实现onAudioFocusChange(): OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT // Pause play

我正在构建一个媒体播放器,并以一种类似于文档的方式实现onAudioFocusChange():

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
    if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
        // Pause playback
    } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
        // Resume playback 
    } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
        am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
        am.abandonAudioFocus(afChangeListener);
        // Stop playback
    }
  }
};
唯一奇怪的问题是:当我把手机和应用程序放在后台,mediaplayer暂停时,服务会随机开始播放。当我删除上面的代码时,它不会发生。因此,
onAudioFocusChange()
被调用时带有
AUDIO\u FOCUS\u GAIN
作为参数似乎是随机的。还有其他人处理过这个问题吗

每次应用程序请求或释放音频焦点时,都会调用onAudioFocusChange()。这可以来自任何应用程序,而不仅仅是您的应用程序。 事实上,每一个播放声音的通知(eq.Text/mail/…)都会获得焦点,然后释放。一旦其他应用程序释放音频焦点,您的应用程序将再次获得焦点,因此您的简历播放将被调用

为了避免在您不想播放时播放,您可以保留一个布尔值,指示您的应用程序是否应该播放:

boolean wantsMusic = true;
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
    if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
        // Pause playback
    } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN && wantsMusic) {
        // Resume playback 
    } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
        am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
        am.abandonAudioFocus(afChangeListener);
        // Stop playback
    }
  }
};