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地址。
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 接口|axios接口报错-参数类型错误解决
- iOS|iOS 笔记之_时间戳 + DES 加密
- iOS,打Framework静态库
- 常用git命令总结