AVAudioSession中断

时间:2013-11-07 18:39:03

标签: ios audio avaudiosession interruption

所以在我的应用程序中,在iOS 6上运行,一切似乎都可以正常使用音频。我使用旧的C API格式来捕获使用回调的中断;通过以下方式设置AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self),这很棒。但是,使用iOS 7 SDK时,似乎在设备接到呼叫或闹钟响起时,我的中断回调永远不会被调用。

经过一番环顾,我听说旧的C api已被弃用,你应该转向更新的AVAudioSession功能。更多阅读揭示AVAudioSession委托已被弃用,您应该使用NSNotification AVAudioSessionInterruptionNotification来捕获中断并做任何需要做的事情。

对我来说,似乎这个通知实际上并没有被解雇,因此我从未得到适当的中断,这会在通话结束后打破我的所有音频内容。

我注册了这样的通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];

目前,AudioInterruption:函数只记录它被触发的内容。日志和任何断点都没有触发。

要清楚,最初音频播放和录制工作正常。发生中断时(例如来电或闹钟),不会触发中断通知。如果需要更多周围代码,请告诉我。

3 个答案:

答案 0 :(得分:9)

您的应用程序中是否有 AVCaptureSession 实例? 如果是这种情况,我会建议我收到的链接问题答案相同:
尝试将 NO 设置为 AVCaptureSession 实例的 usesApplicationAudioSession 属性。
这是iOS 7以来的一个属性。在之前的iOS版本中,每个 AVCaptureSession 都使用了私有的 AVAudioSession 。从iOS 7开始,Capture Sessions使用共享应用程序的AVAudioSession 默认情况下启用 usesApplicationAudioSession 属性,因此如果要保留旧行为,则必须通过设置来禁用它。

我希望这对你也有用。

答案 1 :(得分:2)

您没有将addObserver调用中的AVAudioSession实例作为最后一个参数传递。

试试这个:

AVAudioSession *session = [AVAudioSession sharedInstance];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(AudioInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:session];

答案 2 :(得分:-1)

对我来说,激活音频会话并在用户实际按下播放按钮时添加观察者已解决了问题;通知被解雇了。我认为苹果医生说的是here