AVAudioSession中断

所以在我的应用程序,在iOS 6上运行,似乎一切正常与audio。 我使用旧的C API格式来使用callback来捕获中断。 通过设置: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) ,这是伟大的。 尽pipe使用iOS 7 SDK,似乎我的中断callback从来没有被调用,当设备接到电话或闹钟closures。

听了一些后,我听说旧的C API已被弃用,你应该转移到新的AVAudioSessionfunction。 更多的阅读表明,AVAudioSession委托已被弃用,你应该使用AVAudioSessionInterruptionNotificationNSNotification捕捉中断,做任何需要做的事情。

对我来说,似乎这个通知从来没有真正被解雇,所以我从来没有得到正确的打断,这就打破了通话结束后的所有audio内容。

我注册了这样的通知:

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

现在, AudioInterruption:函数简单地logging它被触发。 日志和任何断点都不会被触发。

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

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

我希望这也能为你工作。

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

尝试这个:

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

对于我来说,当用户真正按下播放button时激活audio会话和添加观察者已经解决了这个问题; 通知被解雇了。 我想苹果公司在这里说一些关于这个的东西 。