iOS音乐播放器的后台播放和远程控制
iOS的后臺任務一直有很嚴格的限制,一般情況下只有幾類情況能使用后臺任務,下面介紹其中的一種 音樂的后臺播放。
1.要支持后臺任務,首先你得告訴系統你需要后臺任務,所以你首先在Info.plist文件中添加如下:
在Required background modes中添加 App plays audio or streams/video using AirPlay,如果你的app需要后臺從網絡加載數據,把第二項也添上。
2.接下來在代碼中添加音樂后臺播放,在播放音樂之前設置AVAudioSession,一般情況設置為AVAudioSessionCategoryPlayback
//設置音頻后臺播放let session = AVAudioSession.sharedInstance()session.setActive(true, error: nil)session.setCategory(AVAudioSessionCategoryPlayback , error: nil)
3.如果想在控制中心(屏幕上拉)中設置音樂控制,如上一曲,下一曲,暫停,顯示播放時間,那么就要用到遠程控制事件(RemoteControlEvents)。
? 首先在viewDidLoad()等初始化的地方聲明接收RemoteControlEvents,并且在相應地方結束聲明
override func viewWillAppear(animated: Bool) {super.viewWillAppear(animated)//設置遠程管理UIApplication.sharedApplication().beginReceivingRemoteControlEvents()self.becomeFirstResponder()}override func viewWillDisappear(animated: Bool) {super.viewWillDisappear(animated)//關閉遠程管理UIApplication.sharedApplication().endReceivingRemoteControlEvents()self.resignFirstResponder()}
override func canBecomeFirstResponder() -> Bool {return true}
?也不一定在viewController中設置,也可以在appDelegate中的applicationDidBecomeActive中設置結束遠程控制,在applicationDidEnterBackground中接收遠程控制,總之要當前
?類中繼承UIRespond,因為在激活遠程控制后要把它當成第一響應,重寫canBecomeFirstResponder()方法
?
?最后重寫remoteControlReceivedWithEvent方法,處理具體的上一曲,下一曲,暫停,播放等功能
override func remoteControlReceivedWithEvent(event: UIEvent) {if event.type == UIEventType.RemoteControl{switch event.subtype{case .RemoteControlTogglePlayPause: self.pauseAndPlayAction(self.playBtn); break;case .RemoteControlPreviousTrack: self.preBtnAction(self.preBtn); break;case .RemoteControlNextTrack: self.nextBtnAction(self.nextBtn); break;case .RemoteControlPlay: self.pauseAndPlayAction(self.playBtn); break;case .RemoteControlPause: self.pauseAndPlayAction(self.playBtn); break;default: break;}}}4.上面已經完成了遠程的控制,但歌曲的信息,比如歌曲名,歌唱者,專輯和播放時間還沒設置呢。要完成這項功能就要用到MPNowPlayingInfoCenter
按照官方注釋
// The elapsed time of the now playing item, in seconds. // Note the elapsed time will be automatically extrapolated from the previously // provided elapsed time and playback rate, so updating this property frequently // is not required (or recommended.) @availability(iOS, introduced=5.0) let MPNowPlayingInfoPropertyElapsedPlaybackTime: String // NSNumber (double)一旦設置了過后,它將按照播放速率(默認為1.0)自動刷新,不需要你手動刷新。但這里有個小小的問題,如果你暫停播放音樂,但是這個ElapsedPlaybackTime任然在后臺默默的刷新,導致你再點擊播放時,顯示的播放時間與實際的播放時間不同,所以你在這里要做處理。我在暫停播放音樂后,再次點擊播放時重新設置了一下NowPlayingInfoElapsedPlaybackTime,使之與實際的播放時間相符 @IBAction func pauseAndPlayAction(sender: UIButton) {if audioPlayer.playbackState == MPMoviePlaybackState.Playing{audioPlayer.pause()}else{//重新設置當前播放時間MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = self.audioPlayer.currentPlaybackTimeaudioPlayer.play()}}5.好了,大功告成了!你可以完美實現音樂的后臺播放和遠程控制了
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這里要非常感謝參考的文章
總結
以上是生活随笔為你收集整理的iOS音乐播放器的后台播放和远程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gm把mysql连接设置密码_完整的GM
- 下一篇: 王艳平老师——获取本地信息代码