在我的应用中,在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:
函数只是记录了它被触发的事实。日志和任何断点都没有触发。
需要明确的是,初始时音频播放和录制都正常工作。当出现中断(例如来电或闹钟)时,不会触发任何中断通知。如果需要更多周围代码,请告诉我。
AVAudioSessionInterruptionNotification
,那么我的观察者会触发,所以这是有效的。仍然不知道为什么系统本身没有发布通知。 - DocsetActive
吗? - imihaly[session setMode:AVAudioSessionModeVoiceChat error:&error]
和[[AVAudioSession sharedInstance] setActive:YES error:&activationError]
。我在添加观察者之前设置了模式,并在之后设置了活动状态,尽管这似乎并不重要(?)。 - DocAVAudioSessionCategoryPlayAndRecord
。尝试不同的选项实验并没有产生任何变化。 - Doc