AVAudioRecorder 有来电时中断录音和恢复录音功能

1、原因

接到需求:

  • 要求录音时有电话、微信电话、QQ电话进来时暂停录音,电话挂断后恢复录音
  • 录音时长分为10分钟一段

2、录音中断方法

  • 监听AVAudioSession的通知AVAudioSessionInterruptionNotification(发生音频中断时系统发布的通知)官方描述
    • 通知返回的是AVAudioSessionInterruptionType枚举
    /// Values for AVAudioSessionInterruptionTypeKey in         AVAudioSessionInterruptionNotification's
    /// userInfo dictionary.
    typedef NS_ENUM(NSUInteger, AVAudioSessionInterruptionType) {
    AVAudioSessionInterruptionTypeBegan = 1, ///< the system has interrupted your     audio session
    AVAudioSessionInterruptionTypeEnded = 0, ///< the interruption has ended
    };
    
    • 当监听到通知下是userInfo:{@"AVAudioSessionInterruptionType":@"1"},则暂停录音userInfo:{@"AVAudioSessionInterruptionType":@"0"},则恢复录音
    [[[AVAudioRecorder alloc] init] pause];//暂停
    [[[AVAudioRecorder alloc] init] stop];//停止录音,关闭文件
    
    [[[AVAudioRecorder alloc] init] prepareToRecord];//创建文件并准备记录。会自动记录下来。
    [[[AVAudioRecorder alloc] init] record];//开始或恢复记录到文件
    
发现问题:恢复录音时,若应用没在前台则恢复不成功
解决方法:增加一个应用到前台的监听UIApplicationDidBecomeActiveNotification

3、录音分段方法

  • 用定时器,在到十分钟时结束录音,自动开启下一段录音
  • 在录音中断时挂起计时器,录音恢复时恢复计时器。
  • 恢复录音只需要调用record,会恢复到之前的文件中

注意:

  • 计时器为空时不能挂起
  • 如果dispatch_source_t处于dispatch_suspend的状态,这个时候调用dispatch_cancel的话,就会导致崩溃。
  • dispatch_resume不能多次调用

你可能感兴趣的:(AVAudioRecorder 有来电时中断录音和恢复录音功能)