您的位置:首页 > 移动开发 > IOS开发

问题解决:AVAudioSession的中断处理方法失效

2015-12-16 21:56 1126 查看

背景知识:

在iOS中,app录音/播放时,有可能会出现被系统中断的情况,比如手机来电话,闹钟,日历事件等等。这时候,系统会中断当前的音频操作,并向app发送一个通知;如果用户点了“忽略”,或者挂断电话等,系统会将声音权限还给app,并再次向app发送通知。具体实现如下:

//监听interruption事件
[[NSNotificationCenter defaultCenter] addObserver:self                                     selector:@selector(handleInterruption:) name:AVAudioSessionInterruptionNotification                                               object:nil];


在方法中可以接收到事件是中断开始,还是中断结束,并进行相应的操作,比如保存音频播放的位置,更新UI等等:

- (void)handleInterruption:(NSNotification*)notification {
NSLog(@"interruption info:%@",notification.userInfo);
}


问题描述:

有时候,设置的中断监听方法会失效,在来电/闹钟等的时候,没有调用监听函数。AVAudioSession已经作了正确的设置:

AVAudioSession* session = [AVAudioSession sharedInstance];
NSError* error;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[session setActive:YES error:&error];


问题原因:

有的app使用了AVCaptureDevice和AVCaptureSession,以进行录音录像操作。为了调优app设置,以更好的进行录音录像,从iOS7开始,在默认情况下,AVCaptureSession会使用app的AVAudioSession,并对其进行修改。这样,设置的中断监听方法会失效。

解决方法:

可以对AVCaptureSession进行设置,让它不要使用app的AVAudioSession:

AVCaptureSession* captureSession = [AVCaptureSession new];
captureSession.usesApplicationAudioSession = NO;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 音频