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不能多次调用
网友评论