iOS AVAudioPlayer中断事件结束继续播放

问题:点击微信语音播放结束后,后台音乐播放器不能在当前时间基础上播放,而是重新开始播放。

思考:中断事件处理方式,一般都是中断开始的时候暂停播放器,中断结束的时候播放,我就是按这种方式出现了上述bug,不知道其他人有遇到没。测试的过程中发现,当我拖动滑块以后,再重复上述操作(点击微信语音,结束以后),发现音乐播放器能继续中断之前的播放时间播放,如果不拖动滑块,而是自然播放的话,就会出现问题描述的bug. 查阅资料网上没有相关的处理,回到问题的本身,不能在中断的时间的基础上继续播放,说明AVAudioPlayer类没有保存当前的播放时间,或者说中断事件回来以后它的属性curretTime值丢失了(原因就不得而知了),ok,那我可以在中断开始的时候保存当前播放的时间,等中断结束以后再把当前时间赋值给AVAudioPlayer的curretTime属性,另外这里需要稍微做下处理,就是排除中断情况,这种代码对其它正常播放事件的影响。

解决办法:
在封装播放音乐的类里面创建两个变量

@property (nonatomic,assign) NSTimeInterval  currentPlayTime;

@property (nonatomic,assign) BOOL  isPause;

在播放音乐的方法里面加入

   if (![player isPlaying]) {
        //解决中事件恢复后不能记录之前的播放时间
        if (self.isPause) {
           player.currentTime = self.currentPlayTime;
            self.isPause = NO;
        }
        [player play];
    }

在暂停播放音乐的方法里面加入

-(void)pauseMusic:(NSString *)fileName
{
    if (fileName == nil || fileName.length == 0) return;
    
    AVAudioPlayer * player = self.musicPlayers[fileName];
    if ([player isPlaying]) {
        self.currentPlayTime = player.currentTime;
        self.isPause = YES;
        [player pause];
    }
}

结果:上述思路可以解决该问题,如开发音乐播放器有出现上述问题的开发者可以下载具体代码了解。github地址。

你可能感兴趣的:(iOS AVAudioPlayer中断事件结束继续播放)