Apple的演示项目aurioTouch2演示了在录制模式下处理音频中断时遇到的iOS-6问题。
情景非常具体。当处于录音模式时,进行电话呼叫,然后应答(拒绝呼叫不会导致错误)。然后,挂断后,应用程序返回焦点并无法继续录制。
错误消息为:AUIOClient_StartIO失败(2003329396) 此错误代码有助于翻译“what”一词。
aurioTouch2项目是iOS-5的更新,但不适用于iOS-6。对于我的应用来说,这似乎是一个相当严重的错误,因为该设备是“手机”。
我没有运气就尝试了所有明智的变化。有人遇到同样的问题吗? 非常感谢。
编辑:以下是为我修复的代码。修复程序在评论中注明。不完全优雅,但此时我会采取任何措施。
在应用程序返回活动状态后,会在某个时刻调用此方法。我有中断结束触发器设置一个标志,然后当事情再次存活时,我检查标志然后在这里调用此方法。
-(void) handleEndInterruption {
// Reset audio session
UInt32 category = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (category), &category );
// Reactivate the current audio session
AudioSessionSetActive(YES);
// Do this, and fail with: AUIOClient_StartIO failed (2003329396)
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Do it a second time and it works
AudioSessionSetActive(NO);
AudioSessionSetActive(YES);
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Restore open al context
alcMakeContextCurrent([AudioDispatcher sharedInstance].audioContext);
// 'unpause' my context
alcProcessContext([AudioDispatcher sharedInstance].audioContext);
}
答案 0 :(得分:0)
我遇到了同样的问题并找到了解决方案。
使用核心电话框架来检测来电,我通过关闭文件“不合理地”停止录制,而不触及音频队列。然后,当应用程序恢复时,我显示处于暂停状态的录制,然后用户可以恢复录制。与此同时,我重新启动了所有核心音频队列。
如果您使用ARC,请注意callEventHandler
CTCallCenter
。它未正确发布,因此请记住将其设置为nil
。