Музыкальная информация отображается в командном центре, но не на экране блокировки - PullRequest
0 голосов
/ 13 января 2019

Использование Swift 4+, iOS 11+, Xcode 10 +

Я создал музыкальный проигрыватель, используя MPMediaPlayer, и я могу взаимодействовать с ним из командного центра, однако я хотел бы также видеть его на экране блокировки.

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

Это то, что я сделал до сих пор:

1) Я использую приложение MusicPlayer и убедился, что во время моих тестов что-то играет:

MPMusicPlayerController.applicationMusicPlayer

2) Настройте фоновые режимы на включение звуковых, выборочных и удаленных уведомлений.

enter image description here

3) Добавлен код AVAudioSession (который, похоже, ничего не делает, так как я пробовал и пытался закомментировать его и не видел никакой разницы):

  let session = AVAudioSession.sharedInstance()
    do {
        // Configure the audio session for playback
        try session.setCategory(AVAudioSessionCategoryPlayback,
                                mode: AVAudioSessionModeDefault,
                                options: [])
        try session.setActive(true)
    } catch let error as NSError {
        print("Failed to set the audio session category and mode: \(error.localizedDescription)")
    }

4) Использовал этот базовый код, чтобы посмотреть, смогу ли я отобразить его на экране блокировки только с некоторым жестко закодированным контентом:

let nowPlayingInfo: [String: Any] = [
    MPMediaItemPropertyArtist: "Pink Floyd",
    MPMediaItemPropertyTitle: "Wish You Were Here",
    //MPMediaItemPropertyArtwork: mediaArtwork,
]
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo

UIApplication.shared.beginReceivingRemoteControlEvents()
let commandCenter = MPRemoteCommandCenter.shared()

5) Я знаю, что не реализовал ничего, чтобы активно обновлять информацию или отвечать на какие-либо команды, так как сейчас я просто пытаюсь что-то показать на экране блокировки.

Почему воспроизводимая сейчас информация отображается в командном центре, если я ничего не сделал, чтобы поместить ее туда?

Что мне нужно сделать, чтобы информация отображалась на экране блокировки, как это делается в командном центре?

EDIT: Ссылка на простой проект, который имеет ту же проблему на GitLab: https://gitlab.com/whoit/lockscreentest

РЕДАКТИРОВАТЬ: Я представил это как ошибку в Apple, однако они еще не подтвердили или не решили это.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Использование .systemMusicPlayer вместо .applicationMusicPlayer решит вашу проблему.

Как яблочный документ:

Музыкальный проигрыватель не влияет на состояние приложения Музыка. Когда приложение переходит в фоновый режим, музыкальный проигрыватель перестает воспроизводить текущее мультимедиа.

И я думаю, что это связано с отсутствием отображения на заблокированном экране.

, а также systemMusicPlayer обрабатывает всю информацию о песне для автоматического показа.

0 голосов
/ 13 января 2019

Мне пришлось заполнить (даже пустой строкой) как минимум 4 клавиши, чтобы увидеть что-то правильное на экране блокировки:

  • MPMediaItemPropertyTitle
  • MPMediaItemPropertyArtist
  • MPMediaItemPropertyAlbumTitle
  • MPNowPlayingInfoPropertyPlaybackRate

Вы можете проверить это Источник кода NowPlayingSource :

...