问题解决: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;
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- java音频播放示例分享(java如何播放音频)
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- python通过wxPython打开一个音频文件并播放的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法