2

我正在使用 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 所说的中断?

4

1 回答 1

5

iOS 6 中有一个错误。似乎从未为开始中断调用中断代码 - 这包括旧的弃用方法(使用 AVAudioSession 委托)和新的通知方法。

我自己和其他一些人已经向 Apple 提出了一个高度严重的错误请求,所以我建议你也这样做 ( bugreport.apple.com ) 以引起他们的注意。

我不确定您使用中断的目的是什么,但我正在使用它来允许音频在必要时在中断后恢复,并更新界面中的播放/暂停按钮。我不得不改变我的方法来观看 AVPlayer 速率属性来切换播放/暂停按钮,并且不允许音频在中断后恢复。

编辑:看到这个线程

于 2012-10-14T10:14:19.900 回答