固予iOS开发iOS Developer

iOS后台/锁屏循环播放音乐

2016-06-27  本文已影响1919人  魏天晨

开发时最难走的路,莫过于苹果的套路~

今天给大家分享一个关于后台模式下,如何循环播放音乐的Demo

今天心血来潮,想要写一个音乐播放的软件自己玩.既然是音乐播放,想要玩的舒服,那么支持后台播放是必须的.好在苹果很好实现这个功能,我们只需要代码稍微设置下
NSError *error = nil; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
再把Xcode的后台模式勾选下

Xcode中的设置

这样就可以实现后台的音乐播放了.接下来就是播放器的使用

播放器的选择

AVQueuePlayer是根据内部的items数组来进行播放的,当前的item播放完毕后,会自动从列表中删除,同时播放下一个.这样就实现了自动播放的效果.当一轮音乐播放完毕的时候,我们只需要将列表重新添加一下即可.

需要注意的地方

1.一开始我将所有播放的item数组用了一个全局变量存储起来,打算用来列表清空后添加,但是当我使用insertItem函数的时候,苹果抛出了一个异常:同一个item最多只能在列队中存在一次.于是尝试removeAllItems删除之前所有添加item,结果依然抛出相同异常.尝试将播放器置为nil利用数组重新初始化,结果抛出另一个异常:同一个item无法作用于不同的AVPlayer

Excuse me?

无论是移除item还是将播放器置为nil都无法解决掉这个问题,只有创建新的列队来添加到尾部,实现循环列表
2.程序会在播放器的音乐播放结束的最后一秒挂起,这时候就无法操作了,普遍解决方案是注册taskID,但是楼主觉得比较麻烦.因为我们使用的是列队播放,和AVAudioPlayer相比有着得天独厚的优势,所以只要在最后一首播放结束前前被删除的列队重新添加进去就好了.

当然,理论说得再多也不如一个Demo来的实在
附上Demo地址:https://github.com/WeiTChen/MyMusci

上一篇下一篇

猜你喜欢

热点阅读