iOS 设置AVAudioSessionInterruptionNotification通知无效
设置AVAudioSessionInterruptionNotification通知无效
如下代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAudioSessionEvent:) name:AVAudioSessionInterruptionNotification object:nil]; -(void)onAudioSessionEvent:(NSNotification*)noty{ NSLog(@"%@",noty.userInfo); // AVAudioSessionInterruptionTypeBegan // AVAudioSessionInterruptionTypeEnded // AVAudioSessionInterruptionTypeKey = 1; // AVAudioSessionInterruptionTypeKey = 0; NSDictionary *dict = noty.userInfo; if ([dict[AVAudioSessionInterruptionTypeKey]integerValue]==AVAudioSessionInterruptionTypeBegan) { // pause }else if([dict[AVAudioSessionInterruptionTypeKey]integerValue]==AVAudioSessionInterruptionTypeEnded){ // play } }
解决办法 将AVAudioSession中的配置选项设置为AVAudioSessionCategoryOptionDefaultToSpeaker即可。
例如
- (void)setUpAudioSession { // 新建AudioSession会话 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; // 设置后台播放 NSError *error = nil; [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error]; if (error) { NSLog(@"Error setCategory AVAudioSession: %@", error); } NSError *activeSetError = nil; // 启动AudioSession,如果一个前台app正在播放音频则可能启动失败 [audioSession setActive:YES error:&activeSetError]; if (activeSetError) { NSLog(@"Error activating AVAudioSession: %@", activeSetError); } }