一旦屏幕在实际设备中被锁定,LockScreen Player 就不会出现。

LockScreen Player is not appearing once the screen is locked in actual device.

我是 swift 的新手,我有一个 AVPlayer,它在特定屏幕上播放效果很好。我的 objective 是在锁屏模式下播放相同的音频。到目前为止,这就是我所做的,代码如下。出于某种原因,我根本看不到锁屏状态下的播放器小部件。我在这里做错了什么。

class MyAudiosViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,AVAudioPlayerDelegate {


@IBAction func playButtonPressed(_ sender: Any) {
        if(currentRowSelected != nil ){
            if AudioPlayer.isPlaying() {
                AudioPlayer.pause()
                playButton.setImage(UIImage(named: "play_button"), for: UIControlState.normal)
            } else {
                AudioPlayer.play()
                playButton.setImage(UIImage(named: "pause_button"), for: UIControlState.normal)
            }

            setUpBackgroundMode()

        }else{
            "Track is not selected from list"
        }

    }

}


 extension MyAudiosViewController {

    override func remoteControlReceived(with event: UIEvent?) {
        if let receivedEvent = event {
            if (receivedEvent.type == .remoteControl) {
                switch receivedEvent.subtype {
                case .remoteControlTogglePlayPause:
                   playButtonPressed(AudioPlayer.isPlaying())
                case .remoteControlPlay:
                playButtonPressed(AudioPlayer.player?.play())
                case .remoteControlPause:
                   playButtonPressed(AudioPlayer.player?.pause())
                case .remoteControlNextTrack:
                     print("next pressed")
                case .remoteControlPreviousTrack:
                     print("previous pressed")
                default:
                    print("received sub type \(receivedEvent.subtype) Ignoring")
                }
            }
        }
    }

    func setUpBackgroundMode() {
        if  let positionSong = AudioPlayer.getPlayingIndex() {
            let song = songDetailsArray[positionSong]
            let songData = song.audioDetails

        MPNowPlayingInfoCenter.default().nowPlayingInfo = [
            MPMediaItemPropertyTitle: songData?.title ?? "",
            MPMediaItemPropertyArtist: songData?.healerName ?? "",
            MPMediaItemPropertyPlaybackDuration: 
            self.player?.currentItem?.asset.duration
        ]
            UIApplication.shared.beginReceivingRemoteControlEvents()

        becomeFirstResponder()
       }
      }
  }

试试这个并检查这个 demo

在你的播放器视图控制器中声明这个变量

var audioSession = AVAudioSession.sharedInstance()

viewDidiLoad中添加这段代码

    try! self.audioSession.setCategory(AVAudioSessionCategoryPlayback)
    try! self.audioSession.setActive(true)

    UIApplication.shared.beginReceivingRemoteControlEvents()
    self.becomeFirstResponder()

将数据传递给这个函数或你的函数

var nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
var remoCommandCenter = MPRemoteCommandCenter.shared()
func updateNowPlayingInfo(trackName:String,artistName:String,img:UIImage) {

    var art = MPMediaItemArtwork(image: img)
    if #available(iOS 10.0, *) {
        art = MPMediaItemArtwork(boundsSize: CGSize(width: 200, height: 200)) { (size) -> UIImage in
            return img
        }
    }

    nowPlayingInfoCenter.nowPlayingInfo = [MPMediaItemPropertyTitle: trackName,
                                           MPMediaItemPropertyArtist: artistName,
                                           MPMediaItemPropertyArtwork : art]

    remoCommandCenter.seekForwardCommand.isEnabled = false
    remoCommandCenter.seekBackwardCommand.isEnabled = false
    remoCommandCenter.previousTrackCommand.isEnabled = false
    remoCommandCenter.nextTrackCommand.isEnabled = false
    remoCommandCenter.togglePlayPauseCommand.isEnabled = false
}

加载新歌时调用上述函数。

  func loadNewSong() {
      //your audio player code.
      updateNowPlayingInfo(trackName:"just Like that", artistName:"LeoJam",img:UIImage(string:"img")!)
  }