如果在通话期间插入麦克风,则不会恢复录音

时间:2014-12-31 13:15:23

标签: ios objective-c core-audio avaudiosession

目前我在iOS上开发应用程序,在AudioQueue的帮助下记录音频文件。为了处理电话,闹钟等中断,我注册了notification的回调:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionDidChangeInterruptionType:)
                                             name:AVAudioSessionInterruptionNotification object:self.session];

并妥善处理

- (void)audioSessionDidChangeInterruptionType:(NSNotification *)notification 
{
    AVAudioSessionInterruptionType interruptionType = (AVAudioSessionInterruptionType)[[[notification userInfo]
                                                                                    objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];

    if (AVAudioSessionInterruptionTypeBegan == interruptionType)
    {
        //handle beginning or interruption
    }
    else if (AVAudioSessionInterruptionTypeEnded == interruptionType)
    {
        //handle end or interruption
    } 
}

一切正常,只要用户接到电话,录音暂停,然后在完成电话后恢复。但有一个细微的细节打破了所有这一切。如果我在microphone期间插入或插入phone call,则不会恢复录制。它没有恢复,因为当我完成电话呼叫时,不会调用audioSessionDidChangeInterruptionType方法AVAudioSessionInterruptionTypeEnded。对于应用程序,中断永远不会结束。

我有一个想法,在中断开始时启动NSTimer,如果电话已经完成,则每秒检查一次,但它有两个缺点:

  1. 非常
  2. 它不能解决所有情况,即闹钟。
  3. 你有没遇到过这个问题?如果是的话,你找到了办法吗?

    我在iOS8上使用iPhone 5S。

1 个答案:

答案 0 :(得分:0)

来自Apple iOS Human Interface Guidelines on Sound

  

用户使用耳机和耳机私下听取声音并释放声音   他们的手。无论这些配件是否有线或   无线,用户对用户体验有特定的期望。

     

当用户插入耳机或耳机或连接无线时   音频设备,他们打算继续听当前的音频,   但是私下里。出于这个原因,他们期待一个当前的应用程序   播放音频以继续播放而不会暂停。

     

当用户拔下耳机或耳机时,或断开连接   无线设备(或设备超出范围或关闭),他们   不想自动分享他们一直在听的内容   其他。出于这个原因,他们期待一个正在播放的应用   音频暂停,允许它们明确重启时播放   他们准备好了。

鉴于你很难找到一个干净的解决方案。