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

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

@property (nonatomic,assign) NSTimeIntervalcurrentPlayTime; @property (nonatomic,assign) BOOLisPause;

在播放音乐的方法里面加入
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]; } }

【iOS|iOS AVAudioPlayer中断事件结束继续播放】结果:上述思路可以解决该问题,如开发音乐播放器有出现上述问题的开发者可以下载具体代码了解。github地址。

    推荐阅读