最近半个月一直在忙公司iPhone App修改和上架的事。改改bug调调UI那是每天的例行小事。最头疼的是将现在的基于iOS 3的app升级成基于iOS 4的版本。对,没错,我们希望我们的app能够在iPhone 4上全面支持multitasking,而对于一个音乐类app来说,也就是我们的app能够在后台播放,并且能够全面接管iPod app的控制钮和图标。就像Spotify和Pandora一样。
然而这真的是一件很让人头疼的事情。苹果的iOS 4官方文档在background有点语焉不详。按照官方文档(http://bit.ly/cIZBEO)的说法:
- 首先,你得使用最新版的Xcode
- 接着,打开使用旧版Xcode创建的工程文件,修改***info.plist文件,其实也就是告诉Xcode,“我这app呀,它打算支持后台音乐播放”
官方文档到这就差不多没了。按照这样的修改方法,我们试了试,还真行。唉呆会,不对,怎么放完了一首歌就自动停住了?
恩哪。还真会停住。具体情况是:
- 如果音频操作是用苹果官方的AVFoundation.framework实现的话,每播放完一首歌曲,app就会自动被iOS给suspend掉。这有一个山寨的解决办法:另init一个AVAudioPlayer的实例,从app启动开始,就不断重复播放一个无声的音频片段。这个方法能够保证歌曲切换的间隙里app仍然有音频输出。而只要不断有音频输出,iOS就不会把你的app给suspend掉。真的很山寨,但如果你使用的就是AVFoundation这个framework的话,这招对付旧版Xcode的代码真的很管用。
- 如果你使用的是著名的开源的AudioStreamer的旧版代码。恩,这个这个,上述偷偷放歌的方法就不是很管用了。app启动以后就会自己crash掉。可是,万幸的是,AudioStreamer最近刚刚推出了更新版,已经可以很好的支持iOS 4的后台播放功能了,看这里:http://github.com/DigitalDJ/AudioStreamer。
恩到这里,后台不间断播放的问题就解决了。无论是播放本地音乐库(AVAudioPlayer or AudioStreamer),还是播放在线内容(AudioStreamer),我们都可以轻松的按下Home键然后边玩别的边听音乐了。然而这还不是问题的全部,我们的app还没有顺利接管iOS 4快速切换菜单(Switching board)中的iPod导航钮。这个,下篇博文再说。