Управление музыкой на экране блокировки iPhone

Я разрабатываю музыкальное приложение, но для управления экраном блокировки я не могу назначить продолжительность времени и прошедшее время

вот мой код

let commandCenter = MPRemoteCommandCenter.shared()

        commandCenter.previousTrackCommand.isEnabled = true;
        commandCenter.previousTrackCommand.addTarget(self, action:#selector(home_ViewController.btn_rewind(_:)))

        commandCenter.nextTrackCommand.isEnabled = true
        commandCenter.nextTrackCommand.addTarget(self, action:#selector(home_ViewController.btn_fast(_:)))

        commandCenter.playCommand.isEnabled = true
        commandCenter.playCommand.addTarget(self, action:#selector(home_ViewController.play_player))

        commandCenter.pauseCommand.isEnabled = true
        commandCenter.pauseCommand.addTarget(self, action:#selector(home_ViewController.pause_player))

        commandCenter.togglePlayPauseCommand.isEnabled = true
        commandCenter.togglePlayPauseCommand.addTarget(self, action:#selector(home_ViewController.togglePlay_Pause))

        commandCenter.skipBackwardCommand.isEnabled = false
        commandCenter.skipForwardCommand.isEnabled = false

        if #available(iOS 9.1, *) {
            commandCenter.changePlaybackPositionCommand.isEnabled = true
        } else {
            // Fallback on earlier versions
            return
        }

и информация для СМИ

func setLockInfo()
    {
        let url = URL(string: song_UrlString)
        let data = try? Data(contentsOf: url!)
        let art = MPMediaItemArtwork.init(image: UIImage(data: data!)!)



        let songInfo :[String : Any] = [MPMediaItemPropertyTitle :st_title,MPMediaItemPropertyArtwork : art]

        MPNowPlayingInfoCenter.default().nowPlayingInfo = songInfo


    }

Я получаю заголовок и изображение, но на экране блокировки не отображается время

Я использую SWIFT 3 для кодирования


person Rakshit Korat    schedule 03.11.2016    source источник


Ответы (2)


Он не отображает время, потому что вы не говорите ему отображать время.

Чтобы показать время воспроизведения, ваш nowPlayingInfo словарь должен включать значения для ключей:

  • MPNowPlayingInfoPropertyElapsedPlaybackTime, чтобы узнать текущее время, когда вы начинаете играть,
  • MPMediaItemPropertyPlaybackDuration, поэтому он знает, относительно текущего времени на панели, и
  • MPNowPlayingInfoPropertyPlaybackRate, поэтому он может автоматически обновлять пользовательский интерфейс времени воспроизведения без необходимости периодически устанавливать Текущее время.

Если вы хотите, чтобы шкала времени воспроизведения была интерактивной (то есть позволяла переходить к другому времени, а не просто отображать текущее время, зарегистрируйте changePlaybackPositionCommand в удаленном командном центре.

person rickster    schedule 03.11.2016
comment
let songInfo: [String: Any] = [MPMediaItemPropertyTitle: st_title, MPMediaItemPropertyArtwork: art, MPNowPlayingInfoPropertyElapsedPlaybackTime: NSNumber.init(value: (player.currentTime()).value), MPMediaItemPropertyPlaybackDuration: NSNumber.init(value: ((player.currentItem ?.duration)?.value)!),MPNowPlayingInfoPropertyPlaybackRate :NSNumber.init(value: 1)] я изменил выше, но все еще не идет - person Rakshit Korat; 03.11.2016
comment
Можно пожалуйста пример - person Rakshit Korat; 03.11.2016

Пример Swift 3 со всеми запущенными командами, включая changePlaybackPositionCommand:

func remotePlayerInit() {
    UIApplication.shared.beginReceivingRemoteControlEvents()
    let commandCenter = MPRemoteCommandCenter.shared()

    commandCenter.pauseCommand.addTarget(self, action: #selector(self.pauseSongTouch(_:)))
    commandCenter.playCommand.addTarget(self, action: #selector(self.playSongTouch(_:)))
    commandCenter.nextTrackCommand.addTarget(self, action: #selector(self.nextSongTouch(_:)))
    commandCenter.previousTrackCommand.addTarget(self, action: #selector(self.previousSongTouch(_:)))
    commandCenter.changePlaybackPositionCommand.addTarget(self, action: #selector(self.changedThumbSlider(_:)))

    setLockInfo()
}

func changedThumbSlider(_ event: MPChangePlaybackPositionCommandEvent) -> MPRemoteCommandHandlerStatus {
    audioPlayer.currentTime = event.positionTime
    setLockInfo()
    return .success
}

func setLockInfo()
{
    let image = PlayerVC.songs[PlayerVC.currentSelection].image
    let artwork = MPMediaItemArtwork.init(boundsSize: image.size, requestHandler: { (size) -> UIImage in
        return image
    })

    let songInfo: [String: Any] = [MPMediaItemPropertyTitle:  PlayerVC.songs[PlayerVC.currentSelection].name, 
                                   MPMediaItemPropertyArtwork: artwork, 
                                   MPNowPlayingInfoPropertyElapsedPlaybackTime: TimeInterval(audioPlayer.currentTime),
                                   MPNowPlayingInfoPropertyPlaybackRate: 1,
                                   MPMediaItemPropertyPlaybackDuration: audioPlayer.duration,
                                   MPMediaItemPropertyArtist: "Artist"]

    MPNowPlayingInfoCenter.default().nowPlayingInfo = songInfo
}
person coldembrace    schedule 07.01.2018