美文网首页
音频会话的中断处理

音频会话的中断处理

作者: 伯wen | 来源:发表于2016-12-19 17:53 被阅读139次

    音频会话中断

    • 当有人打来电话时, 音频会话会中断播放音频
    • 当电话挂断后, 音频是不会重新开始播放的
    • 为了处理这种情况, 可以使用下面的代码

    音频会话通知

    • AVAudioSession在中断时会发出一个通知 <a>AVAudioSessionInterruptionNotification</a>
    • 我们可以通过这个通知来监听音频会话的中断
    // 会话中断通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleInterruption:) name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]];
    
    • 我们使用<a>AVAudioSessionInterruptionType</a>来判断会话的状态
      • AVAudioSessionInterruptionTypeBegan: 中断开始
      • AVAudioSessionInterruptionTypeEnded: 中断结束
    /**
     会话中断通知
     */
    - (void)handleInterruption:(NSNotification *)notification
    {
        NSDictionary *info = notification.userInfo;
        AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
        if (type == AVAudioSessionInterruptionTypeBegan) {
            // 音频会话中断开始, 处理音频中断
        }else if (type == AVAudioSessionInterruptionTypeEnded) {
            // 音频会话中断结束
        }
    }
    
    • 会话中断结束后, 我们需要处理音频会话是否已经重新激活, 以及是否可以再次播放音频
    • 我们使用<a>AVAudioSessionInterruptionOptions</a>
    /**
     会话中断通知
     */
    - (void)handleInterruption:(NSNotification *)notification
    {
        NSDictionary *info = notification.userInfo;
        AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
        if (type == AVAudioSessionInterruptionTypeBegan) {
            // 音频会话中断开始, 处理音频中断
        }else if (type == AVAudioSessionInterruptionTypeEnded) {
            // 音频会话中断结束, 处理重新播放音频
            AVAudioSessionInterruptionOptions options = [info[AVAudioSessionInterruptionOptionKey] unsignedIntegerValue];
            if (options == AVAudioSessionInterruptionOptionShouldResume) {
                // 可以重新播放音频
            }
        }
    }
    
    • 注意: 当音频会话中断并结束中断后, 之前播放的音频是不会自动播放的, 我们需要再次启动播放

    相关文章

      网友评论

          本文标题:音频会话的中断处理

          本文链接:https://www.haomeiwen.com/subject/sgvtvttx.html