12

所以在我的应用程序中,在 iOS 6 上运行,一切似乎都可以正常工作。我使用旧的 C API 格式通过回调捕获中断;通过设置:AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)这很棒。不过,使用 iOS 7 SDK,当设备收到呼叫或警报响起时,似乎永远不会调用我的中断回调。

环顾四周后,我听说旧的 C api 已被弃用,您应该使用更新的 AVAudioSession 函数。更多阅读表明 AVAudioSession 委托已被弃用,您应该使用NSNotificationforAVAudioSessionInterruptionNotification来捕捉中断并做任何需要做的事情。

对我来说,似乎这个通知实际上从未被触发,因此我永远不会被正确地打断,这会在通话结束后破坏我所有的音频内容。

我像这样注册通知:

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

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

需要明确的是,最初的音频播放和录制工作正常。当发生中断(例如来电或警报)时,不会触发中断通知。如果需要更多周边代码,请告诉我。

4

3 回答 3

9

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

没有

我希望这也对你有用。

于 2014-01-17T21:55:50.157 回答
2

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

尝试这个:

AVAudioSession *session = [AVAudioSession sharedInstance];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(AudioInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:session];
于 2013-12-21T12:56:44.273 回答
-1

对我来说,当用户实际按下播放按钮时激活音频会话并添加观察者已经解决了这个问题;通知被解雇了。我认为苹果文档在这里说些什么。

于 2016-11-30T17:20:09.387 回答