【问题标题】:Audio recording won't work after incoming call来电后无法录音
【发布时间】:2014-03-16 08:45:25
【问题描述】:

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

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];

它工作正常,但如果收到来电(当应用程序处于活动状态时),在通话完成并恢复应用程序后,不再检测到麦克风输入。

我尝试处理 - (void)applicationDidBecomeActive:(UIApplication *)application 并重置 AVAudioSession,但它不起作用。当应用程序处于非活动状态时,我是否需要暂停 AVAudioRecorder,并在它变为活动状态时进行记录?

是我做错了什么,还是 iOS 错误?我在 iOS 7 上运行。谢谢

【问题讨论】:

    标签: ios ios7 avaudiorecorder avaudiosession


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您是正确的,您需要在收到呼叫后暂停AVAudioRecorder,然后在结束后恢复它。但是,您不需要在applicationDidBecomeActive: 中执行此操作,而是需要实现AVAudioSession 的委托,更具体地说是audioRecorderBeginInterruption:audioRecorderEndInterruption:。 查看here 以获取有关如何实现这些委托的示例。 我也会看看 this SO post 应该可以解决你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 2012-09-10
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多