AVAudioSession中断

Doc*_*Doc 12 audio interruption ios avaudiosession

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

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

对我来说,似乎这个通知从未被实际触发,因此我从未得到适当的中断,然后在通话结束后打破了我的所有音频内容.

我这样注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

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

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

Axe*_*l83 9

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

我希望这对你也有用.

  • 如果[我没有](http://stackoverflow.com/q/24205304/1387438)`AVCaptureSession`怎么办?如果我创建`AVCaptureSession`的虚拟对象(没有添加输入/输出),这会工作吗? (4认同)