来电后,录音功能无法正常工作

时间:2014-02-17 06:52:39

标签: ios ios7 avaudiorecorder avaudiosession

我正在尝试从麦克风录制语音,然后将其播放到扬声器上。我用这段代码来完成它

[[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上运行。谢谢

2 个答案:

答案 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
    }
}