我正在使用 AVPlayer 播放来自不同来源(包括 iPod 音乐库)的声音。由于 AVPlayer 是更底层的 AVAudioPlayer,我必须自己处理中断。使用 AVAudioPlayer 不是一种选择!
在 Apple 开发人员文档中,他们提到AVAudioSessionInterruptionNotification
使用AudioSessionInitialize
. 但这样做时,我只在中断结束时收到通知,但由于他们的文件,我的应用程序应该能够同时处理两者。
我正在使用以下代码来初始化我的音频会话:(简化版,删除了不重要的行)
AudioSessionInitialize(NULL, NULL, ARInterruptionListenerCallback, nil);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(true);
下面是监听器的样子:
void ARInterruptionListenerCallback(void *inUserData, UInt32 interruptionState) {
if (interruptionState == kAudioSessionBeginInterruption) {
// Here is the code which is never called...
}
else if (interruptionState == kAudioSessionEndInterruption) {
// But this case will be executed!
}
}
顺便提一句。我期待当有电话或类似的中断时执行此代码。我是否误解了 Apple 所说的中断?