CarPlay — Показать экран «Воспроизведение» в iOS 13

Мое приложение уже является текущим «приложением, которое сейчас воспроизводится» на телефоне (т. е. вся необходимая информация предоставляется ), и оно правильно отображается на экране блокировки с именем исполнителя, названием трека, изображением обложки и т. д.

Согласно документам, заселение MPNowPlayingInfoCenter.default().nowPlayingInfoи добавления правильной цели/действий должно быть достаточно, чтобы убедиться, что ваше приложение вызывается в CarPlay, когда пользователь нажимает на кнопку Now Playingзначок.

В iOS 14 мне удалось добиться вышеперечисленного, нажав CPNowPlayingTemplateв стек, благодаря некоторым хитростям, которые я нашел в этой статье .

Однако на iOS 13, где все основано на ужасном MPPlayableContentManagerAPI и нет CPTemplateApplicationSceneDelegateметоды вызываются для аудиоприложений, я просто не могу найти способ определить, будет ли/когда отображаться экран «Сейчас исполняется».

MPNowPlayingInfoCenterа также MPRemoteCommandCenterнастроены правильно, как сказано выше, но мое приложение не запускается при нажатии значка «Исполняется» в CarPlay на iOS 13.

Я думал , что этот API поможет мне, но я не мог понять, как (он всегда возвращает пустой массив).

Единственный обходной путь, кажется, добавляет <key>UIBrowsableContentSupportsImmediatePlayback</key><true/>на ваш Info.plist: теперь Воспроизведение отображается правильно, но сразу начинается воспроизведение, чего я не хочу.

Может ли кто-нибудь предоставить рабочее решение?

1 ответ

В CarPlay до iOS 14 мы устанавливаем идентификаторы текущего воспроизведения (в нашем случае только один, поскольку у нас нет списка воспроизведения) после запуска воспроизведения:

  • MPPlayableContentManager.shared().nowPlayingIdentifiers = ["Some Id"]
  • Этот идентификатор должен совпадать с идентификатором MPContentItemкоторый инициировал воспроизведение (и isPlayableустановлен в true