我正在尝试从麦克风录制语音,然后将其播放到扬声器上。我用这段代码来完成它
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
工作正常,但是如果收到来电(当应用处于活动状态时),通话结束后应用程序恢复,则不再检测到麦克风输入。
我尝试处理- (void)applicationDidBecomeActive:(UIApplication *)application
并重置AVAudioSession,但它不起作用。当app处于非活动状态时,我是否需要暂停AVAudioRecorder,并在它变为活动状态时进行记录?
我做错了什么,或者是iOS错误?我在iOS 7上运行。谢谢
答案 0 :(得分:3)
您是正确的,您需要在收到呼叫后暂停AVAudioRecorder
,然后在结束后恢复。但是,您不是在applicationDidBecomeActive:
中执行此操作,而是需要实现AVAudioSession
的委托,更具体地说是audioRecorderBeginInterruption:
和audioRecorderEndInterruption:
。
查看here以获取有关如何实现这些委托的示例。
我还会看this SO post哪个可以解决你的问题。
答案 1 :(得分:2)
Here是关于如何处理AudioSession中断的文档。
OSStatus error = AudioSessionInitialize(NULL, NULL, interruptionListener, NULL);
#pragma mark AudioSession listeners
void interruptionListener( void * inClientData,
UInt32 inInterruptionState)
{
if (inInterruptionState == kAudioSessionBeginInterruption)
{
//handle begin interruption
}
else if(inInterruptionState == kAudioSessionEndInterruption){
//handle end interruption
}
}