- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个媒体播放器并以类似于文档的方式实现 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
}
}
};
唯一奇怪的问题:当我的手机在后台运行该应用程序并且媒体播放器暂停时,该服务将随机开始播放。当我删除上面的代码时,它不会发生。因此,onAudioFocusChange()
以 AUDIO_FOCUS_GAIN
作为参数看似随机地被调用。还有其他人处理过这个问题吗?
最佳答案
每次应用请求或释放音频焦点时都会调用 onAudioFocusChange()。这可以来自任何应用程序,而不仅仅是您的应用程序。事实上,每个播放声音的通知(例如文本/邮件/...)都会获得焦点,然后释放它。一旦另一个应用程序释放音频焦点,您的应用程序将再次获得焦点,因此您的恢复播放将被调用。
为了避免在您不想播放的时候播放,您可以保留一个 bool 值来指示您的应用是否应该播放:
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
}
}
};
关于Android——AudioManager.onAudioFocusChange() 随机触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320826/
private static int changedFocus; private static boolean focusGranted; private static AudioManager au
我正在构建一个媒体播放器并以类似于文档的方式实现 onAudioFocusChange(): OnAudioFocusChangeListener afChangeListener = new OnA
我一直在构建一个 MediaPlayer 应用程序,我一直在尝试让我的 Mediaplayer 应用程序来处理 AudioFocusChange 事件。但是,无论我如何构建我的代码,我似乎都不会监听
我是一名优秀的程序员,十分优秀!