Кнопка воспроизведения/паузы не обновляется при воспроизведении песни

Я создаю музыкальное приложение, которое может интегрироваться с CarPlay, все в порядке... Я могу отображать имя исполнителя, название, название альбома и какой-то контроллер кнопок на музыкальном проигрывателе. Однако существует проблема, заключающаяся в том, что при воспроизведении любой песни из CarPlay кнопка в CarPlay не обновляется так же, как кнопка на устройстве iOS, и время поиска не перемещается.

Что я должен делать ? Я искал много ресурсов, чтобы найти решение, но все же.

введите здесь описание изображения

введите здесь описание изображения

Примечание. Я тестирую его только на симуляторе (не на реальном устройстве).

Это шоу PlayingInfor:

private func nowPlayingInfoOverwrite(time: CMTime) {
    if let nowPlayingItem: PlaylistItem = self.nowPlayingItem {
        let info: NSMutableDictionary = NSMutableDictionary()
        info[MPMediaItemPropertyArtist] = nowPlayingItem.mediaItem?.artist?.name
        info[MPMediaItemPropertyAlbumTitle] = nowPlayingItem.mediaItem?.album?.title
        info[MPMediaItemPropertyTitle] = nowPlayingItem.mediaItem?.title
        info[MPMediaItemPropertyPlaybackDuration] = nowPlayingItem.mediaItem?.playbackDuration
        info[MPMediaItemPropertyArtwork] = nowPlayingItem.mediaItem?.artwork()

        if self.playbackState != .playing {
            info[MPNowPlayingInfoPropertyPlaybackRate] = 1e-6
        } else {
            info[MPNowPlayingInfoPropertyPlaybackRate] = 1
        }
        let sec: TimeInterval = CMTimeGetSeconds(time)
        info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = Int(sec)
        MPNowPlayingInfoCenter.default().nowPlayingInfo = info as? [String: Any]
    } else {
        if !MoviePlayerController.instance.isPlaying() {
            MPNowPlayingInfoCenter.default().nowPlayingInfo = Dictionary()
        }
    }
}

Это дескриптор RemoteCommandEvent:

    let center: MPRemoteCommandCenter = MPRemoteCommandCenter.shared()
    center.pauseCommand.addTarget(self, action: #selector(remoteCommandPause(_ :)))
    center.playCommand.addTarget(self, action: #selector(remoteCommandPlay(_ :)))
    center.stopCommand.addTarget(self, action: #selector(remoteCommandStop(_ :)))
    center.togglePlayPauseCommand.addTarget(self, action: #selector(remoteCommandTogglePlayPause(_ :)))
    center.nextTrackCommand.addTarget(self, action: #selector(remoteCommandNextTrack(_ :)))
    center.previousTrackCommand.addTarget(self, action: #selector(remoteCommandPreviousTrack(_ :)))
    center.nextTrackCommand.isEnabled = true
    center.previousTrackCommand.isEnabled = true

    center.changeShuffleModeCommand.addTarget(self, action: #selector(remoteCommandPause(_ :)))
    center.likeCommand.addTarget(self, action: #selector(remoteCommandPause(_ :)))
    center.changeRepeatModeCommand.addTarget(self, action: #selector(remoteCommandPause(_ :)))
    center.changeShuffleModeCommand.isEnabled = true
    center.likeCommand.isEnabled = true
    center.changeRepeatModeCommand.isEnabled = true

person Le Minh    schedule 13.01.2021    source источник


Ответы (1)


Вы когда-нибудь регистрировались для удаленных событий в своем коде? например

UIApplication.shared.beginReceivingRemoteControlEvents()
person fruitcoder    schedule 22.01.2021
comment
Да, я зарегистрировался для удаленного управления событиями при воспроизведении музыки. UIApplication.shared.endReceiveRemoteControlEvents() UIApplication.shared.beginReceiveRemoteControlEvents() завершениеHandler(nil) - person Le Minh; 23.01.2021
comment
я нашел решение, которое устанавливается if # available(iOS 13, *) { MPNowPlayingInfoCenter.default().playbackState = isPlaying? .playing : .paused при отображении экрана «Информация о воспроизведении», однако это утверждение действительно для iOS 14, а не для iOS 13, хотя я проверил версию iOS перед ее установкой. - person Le Minh; 26.01.2021
comment
Итак, одна вещь, которая не работает в симуляторе, — это кнопка воспроизведения (она никогда не изменится на кнопку паузы, как на реальном устройстве). Перед релизом обязательно нужно проверить свою реализацию на реальном устройстве. Что касается прошедшего времени: можете ли вы проверить, что вы устанавливаете MPNowPlayingInfoPropertyElapsedPlaybackTime каждую секунду? Прогресс на самом деле должен быть таким же, как на iOS в центре уведомлений. Во время реализации мы также обнаружили странное поведение, которое мы задокументировали здесь: medium.com/br-next/ Может быть, это поможет - person fruitcoder; 26.01.2021