前言
我們在寫APP中經(jīng)常會遇到需要鎖屏播放的這種情況,在這里,樓主就簡單的說說鎖屏播放是怎么實現(xiàn)的。
此篇文章為Swift版本,OC版本請移步這里:OC版本
如何實現(xiàn)
打開后臺模式
在設(shè)置的Capabilities中選擇后臺模式的第一項,如下圖所示:

g
導入相應(yīng)的頭文件
import AVFoundation
import MediaPlayer
播放音樂并設(shè)置相關(guān)信息
播放音樂并設(shè)置鎖屏需要顯示的相關(guān)信息
// MARK: 播放音樂
func playMusic() {
audioPlayer = try? AVAudioPlayer(contentsOf: Bundle.main.url(forResource: model.filename, withExtension: nil)!)
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
if !audioPlayer.isPlaying {
audioPlayer.play()
}
}
// MARK: 設(shè)置鎖屏信息顯示
func setLockScreenDisplay() {
var info = Dictionary<String, Any>()
info[MPMediaItemPropertyTitle] = model.name//歌名
info[MPMediaItemPropertyArtist] = model.singer//作者
// [info setObject:self.model.filename forKey:MPMediaItemPropertyAlbumTitle];//專輯名
info[MPMediaItemPropertyAlbumArtist] = model.singer//專輯作者
info[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(image: UIImage.init(named: model.icon)!)//顯示的圖片
info[MPMediaItemPropertyPlaybackDuration] = audioPlayer.duration//總時長
info[MPNowPlayingInfoPropertyPlaybackRate] = 1.0//播放速率
MPNowPlayingInfoCenter.default().nowPlayingInfo = info
}
打開后臺播放
// MARK: 后臺播放
func playingBackground() {
let session = AVAudioSession.sharedInstance()
try? session.setCategory(AVAudioSessionCategoryPlayback)
try? session.setActive(true)
}
打開和關(guān)閉遠程控制事件
在viewWillAppear中打開接受遠程控制事件,在viewWillDisappear中關(guān)閉遠程控制事件,代碼如下:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
becomeFirstResponder()
UIApplication.shared.beginReceivingRemoteControlEvents()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
resignFirstResponder()
UIApplication.shared.endReceivingRemoteControlEvents()
}
設(shè)置鎖屏控制
設(shè)置鎖屏時,鎖屏界面的相關(guān)控制按鈕所應(yīng)該執(zhí)行的方法
// MARK: 鎖屏控制
override func remoteControlReceived(with event: UIEvent?) {
let type = event?.subtype
switch type! {
case .remoteControlPlay: break
//播放
case .remoteControlPause: break
//暫停
case .remoteControlStop: break
//停止
case .remoteControlTogglePlayPause: break
//切換播放暫停(耳機線控)
case .remoteControlNextTrack: break
//下一首
case .remoteControlPreviousTrack: break
//上一首
case .remoteControlBeginSeekingBackward: break
//開始快退
case .remoteControlEndSeekingBackward: break
//結(jié)束快退
case .remoteControlBeginSeekingForward: break
//開始快進
case .remoteControlEndSeekingForward: break
//結(jié)束快進
default:
break
}
}
到這里為止,鎖屏播放就完成了,Demo中附有完整的音樂播放器,Demo下載地址:Demo。最后,希望這篇文章對各位看官們有所幫助。對支持小編的看官們表示感謝。