我有一个使用AVPlayer在后台播放音频的应用程序。我使用MPNowPlayingInfoCenter在锁屏和控制中心上显示歌曲的元数据。除了一件事以外,一切都运行良好。
锁屏和控制中心上的远程控件是播客应用程序的控件。它们没有“前进”和“后退”按钮。
我有一张控件的截图:
正如您所看到的,我没有“前进”和“后退”按钮。
override func viewDidLoad() {
super.viewDidLoad()
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
} catch {
print(error)
}
}
@IBAction func play(sender: AnyObject) {
if isURLAvailable == false {
return
}
if (player!.rate != 0 && player!.error == nil) {
player!.pause()
} else {
player!.play()
}
updateImage()
}
func playSong(song: Song) {
let documentsDirectoryURL = NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as NSURL?
let url: NSURL? = documentsDirectoryURL?.URLByAppendingPathComponent(song.fileName)
let avItem = AVPlayerItem(URL: url!)
player = AVPlayer(playerItem: avItem)
player?.play()
let artworkProperty = MPMediaItemArtwork(image: song.artwork)
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyTitle : lblSongName.text!, MPMediaItemPropertyArtist : song.artist, MPMediaItemPropertyArtwork : artworkProperty, MPNowPlayingInfoPropertyDefaultPlaybackRate : NSNumber(int: 1), MPMediaItemPropertyPlaybackDuration : CMTimeGetSeconds((player!.currentItem?.asset.duration)!)]
}
override func remoteControlReceivedWithEvent(event: UIEvent?) {
print(event!.type)
if event!.type == UIEventType.RemoteControl {
if event?.subtype == UIEventSubtype.RemoteControlPlay || event?.subtype == UIEventSubtype.RemoteControlPause {
play(self)
}
if event?.subtype == UIEventSubtype.RemoteControlNextTrack {
next(self)
}
if event?.subtype == UIEventSubtype.RemoteControlPreviousTrack {
previous(self)
}
}
}