參考:
[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隱藏掉那就是一個後台,一個偽後台,在蘋果不支援背景時候也許這也算個方法,不過肯定比較費電。