【问题标题】:LockScreen Player is not appearing once the screen is locked in actual device.一旦屏幕锁定在实际设备中,LockScreen Player 就不会出现。
【发布时间】:2018-02-13 06:46:26
【问题描述】:

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

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()
       }
      }
  }

【问题讨论】:

    标签: ios swift avplayer swift4 lockscreen


    【解决方案1】:

    试试这个并检查这个demo

    在你的 playerviewcontroller 中声明这个变量

    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")!)
      }
    

    【讨论】:

    • 有了这个实现,我还需要使用我的扩展吗
    • 如果你想使用你的扩展,那么不要调用这个updateNowPlayingInfo 函数,调用你的扩展函数
    • 您能否在上面给出的代码的上下文中显示我应该在哪里使用“updateNowPlayingInfo”。 bcz 与我当前的扩展似乎无法正常工作
    • 我也必须使用“remoteControlReceived”功能吗?否则,当它进入后台情绪以启动 MPRemoteCommandCenter 时,它将如何捕获通知。先生,我在这里错过了什么吗?我在锁定屏幕上看不到小部件。这是我必须做的一切吗
    • 是的,你必须使用remoteControlReceived func。以上代码仅用于在锁定屏幕中显示 nowplying 信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多