锁屏或按Home键后继续播放音乐

来源:互联网 发布:powert片头制作软件 编辑:程序博客网 时间:2024/06/08 01:54
参考:
[1]http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AudioandVideoTechnologies/AudioandVideoTechnologies.html#//apple_ref/doc/uid/TP40007072-CH19-SW34

[2]http://www.cocoachina.com/bbs/read.php?tid-26984.html

[3]http://diwublog.com/archives/89

一般听音乐的app在锁屏状态和按home键后都能继续播放音乐,有些强大的甚至在来短信后能够继续播放,不被中断,比如:百度ting。本文主要介绍锁屏和按home键后仍播放音乐实现。
主要依靠“音频会话”(AVAudioSession)来实现。详细关于AVAudioSession的介绍见参考一。
它可以处理
1)您的音频在Ring/Silent切换过程中是否变为无声
2)在屏幕锁定状态时您的音频是否停止
3)当您的音频开始播放时,iPod音频是继续播放,还是变为无声
更大的音频上下文包括用户所做的改变,比如用户插入耳机,处理Clock和Calendar这样的警告事件,或者处理呼入的电话。通过音频会话,您可以对这样的事件做出恰当的响应。
1.锁屏后仍能继续播放音乐,则只要将下面的代码包含到应用程序中即可

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];[[AVAudioSession sharedInstance] setActive: YES error: nil];

设置了AVAudioSessionCategoryPlayback,表示对于用户切换静音模式或者锁屏 都不理睬,继续播放音乐。并且不播放来自其他app的音乐,当然你可以设置kAudioSessionProperty_OverrideCategoryMixWithOthers  来实现与其他app的音乐混合。
除AVAudioSessionCategoryPlayback外,还有以下其他category。

NSString *const AVAudioSessionCategoryAmbient;NSString *const AVAudioSessionCategorySoloAmbient;NSString *const AVAudioSessionCategoryPlayback;NSString *const AVAudioSessionCategoryRecord;NSString *const AVAudioSessionCategoryPlayAndRecord;NSString *const AVAudioSessionCategoryAudioProcessing;

AVAudioSessionCategoryAmbient静音模式或者锁屏下不再播放音乐,和其他app声音混合。
AVAudioSessionCategorySoloAmbient默认模式,静音模式或者锁屏下不再播放音乐,不和其他app声音混合。
AVAudioSessionCategoryRecord不播放音乐,锁屏状态继续录音
AVAudioSessionCategoryPlayAndRecord 播放音乐,并录音
2.按home键后仍能播放
plist 新增Required  background modes ,内容设置为App plays audio,如下图所示。


注意这个在simulator上是没有效果的,但在真机上可以work。

另外,看到有人说home情况下,播放完一首歌会暂停,不再继续播放。很挫的方法是用另外一个audioplay播放无声的声音,那么
当你播放完一首歌的时候系统就不会将你的app suspend掉,这样你可以切换到下一首继续播放。
也许有更好的方法,这个只是mark一下。

其实这样就相当于一个后台,要是能把app的icon隐藏掉那就是一个后台,一个伪后台,在苹果不支持后台的时候也许这也算个方法,不过肯定比较费电。