问题:点击微信语音播放结束后,后台音乐播放器不能在当前时间基础上播放,而是重新开始播放。
思考:中断事件处理方式,一般都是中断开始的时候暂停播放器,中断结束的时候播放,我就是按这种方式出现了上述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地址。