因此,在我的iOS 6上运行的应用程序中,音频似乎一切正常。我使用旧的catch格式通过回调来捕获中断;通过:AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)进行设置,效果非常好。不过,使用iOS 7SDK时,我的中断回调似乎永远不会在设备接到呼叫或闹钟响起时调用。
环顾四周后,我听说旧的C api已被弃用,您应该转移到较新的AVAudioSession函数。更多的阅读表明,AVAudioSession委托已被弃用,您应该使用AVAudioSessionInterruptionNotification的NSNotification来捕获中断并执行任何需要执行的操作。
对我来说,这个通知似乎从来没有真正触发过,因此我从来没有被适当地打断过,然后在通话结束后中断了我所有的音频内容。
我按如下方式注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];现在,AudioInterruption:函数只是简单地记录它被触发了。日志和任何断点都没有触发。
需要说明的是,最初的音频回放和录制工作正常。当中断发生时(例如来电或告警),不会触发中断通知。如果需要更多的周边代码,请让我知道。
发布于 2014-01-18 05:55:50
您的应用程序中是否有AVCaptureSession实例?
如果是这样的话,我会建议我在链接的问题上得到相同的答案:
尝试将AVCaptureSession实例的属性设置为NO。
这是从iOS 7开始提供的属性。在以前的iOS版本中,每个AVCaptureSession都使用一个私有AVAudioSession。从iOS 7开始,捕获会话使用共享应用程序的AVAudioSession。
默认情况下,属性处于启用状态,因此,如果要保留旧行为,则必须通过设置NO将其禁用。
我希望这也能为你工作。
发布于 2013-12-21 20:56:44
您没有在addObserver调用中将AVAudioSession实例作为最后一个参数传递。
试试这个:
AVAudioSession *session = [AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(AudioInterruption:)
name:AVAudioSessionInterruptionNotification
object:session];发布于 2016-12-01 01:20:09
对我来说,激活音频会话并在用户实际按下播放按钮时添加观察者已经解决了这个问题;通知已触发。我想苹果公司的医生说了一些关于here的事情。
https://stackoverflow.com/questions/19844005
复制相似问题