【发布时间】:2013-11-07 18:39:02
【问题描述】:
所以在我的应用程序中,在 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,那么我的观察者就会触发,这样就可以了。仍然不知道为什么系统没有自己发布通知。 -
你设置了AVAudioSession模式并调用了
setActive? -
是的,否则音频最初不会播放,它会播放。
[session setMode:AVAudioSessionModeVoiceChat error:&error]和[[AVAudioSession sharedInstance] setActive:YES error:&activationError]。我在添加观察者之前设置了模式,然后设置了活动,尽管这无关紧要(?)。 -
您为音频类别设置了什么?
-
我使用
AVAudioSessionCategoryPlayAndRecord。无论选择如何,对选项进行试验都不会产生任何变化。
标签: ios audio avaudiosession interruption