【问题标题】:How can I hide Remote Command Center when AVPlayer has finished to play a song?AVPlayer 播放完歌曲后,如何隐藏 Remote Command Center?
【发布时间】:2020-01-15 22:27:46
【问题描述】:

我有一个使用 AVPlayer 播放 mp3 的应用程序,当曲目完成后,我正在努力隐藏远程命令中心。这是设置我的远程命令中心的功能。

如何隐藏它?

func setupRemoteCommandCenter() {

    // Get the shared MPRemoteCommandCenter
       let commandCenter = MPRemoteCommandCenter.shared()


       // Add handler for Play Command
       commandCenter.playCommand.addTarget { [unowned self] event in
        if self.avPlayer?.rate == 0.0 {
               self.togglePlayPause()
               return .success
           }
           return .commandFailed
       }

       // Add handler for Pause Command
       commandCenter.pauseCommand.addTarget { [unowned self] event in
        if self.avPlayer?.rate == 1.0 {
               self.togglePlayPause()
               return .success
           }
           return .commandFailed
       }

   let skipForwardCommand = commandCenter.skipForwardCommand
   skipForwardCommand.isEnabled = true
   skipForwardCommand.addTarget(handler: skipForward)
   skipForwardCommand.preferredIntervals = [15]

    let skipBackwardCommand = commandCenter.skipBackwardCommand
    skipBackwardCommand.isEnabled = true
    skipBackwardCommand.addTarget(handler: skipForward)
    skipBackwardCommand.preferredIntervals = [15]


    commandCenter.changePlaybackPositionCommand.addTarget { [weak self](remoteEvent) -> MPRemoteCommandHandlerStatus in
        guard let self = self else {return .commandFailed}
        if let player = self.avPlayer {
           let playerRate = player.rate
           if let event = remoteEvent as? MPChangePlaybackPositionCommandEvent {
               player.seek(to: CMTime(seconds: event.positionTime, preferredTimescale: CMTimeScale(1000)), completionHandler: { [weak self](success) in
                   guard let self = self else {return}
                   if success {
                       self.avPlayer?.rate = playerRate
                   }
               })
               return .success
            }
        }
        return .commandFailed
    }
}

【问题讨论】:

    标签: ios xcode mp3 avplayer mpremotecommandcenter


    【解决方案1】:

    您必须从远程控制事件中取消注册并从MPNowPlayingInfoCenter清除您当前的播放信息:

    UIApplication.shared.endReceivingRemoteControlEvents()        
    
    MPNowPlayingInfoCenter.default().nowPlayingInfo = [:]
    

    您可以通过 NotificationCenter 观察者观察AvPlayerItem 结束:

    NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEndTime(_:)), name: .AVPlayerItemDidPlayToEndTime, object: playerItem) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多