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

背景知识:

在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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值