CarPlay - 在 iOS 13 中显示正在播放屏幕

CarPlay - Show Now Playing screen in iOS 13

我的应用程序已经是 phone 上的当前“正在播放的应用程序”(即所有必需的信息都已提供给 MPNowPlayingInfoCenter)并且它在锁定屏幕中正确显示,带有艺术家姓名、曲目标题、艺术作品图片等

根据文档,填充 MPNowPlayingInfoCenter.default().nowPlayingInfo 并将正确的 target/actions 添加到 MPRemoteCommandCenter 应该足以 以确保您的应用当用户点击 Now Playing 图标时在 CarPlay 中调用。

在 iOS 14 我设法通过将 CPNowPlayingTemplate 压入堆栈来实现上述目标,这要归功于我发现的一些巧妙的技巧 in this article.

在 iOS 13 上,一切都基于可怕的 MPPlayableContentManager API,并且 没有 CPTemplateApplicationSceneDelegate 方法被调用 audio-based 应用程序 我根本找不到检测 if/when 正在播放屏幕的方法。

MPNowPlayingInfoCenterMPRemoteCommandCenter 已正确配置 - 如上所述 - 但在 iOS 13.[=24 上点击 CarPlay 中的“正在播放”图标时我的应用程序未被启动=]

我认为 this API 会帮助我,但我不知道如何(它总是 returns 一个空数组)。

唯一的解决方法似乎是将 <key>UIBrowsableContentSupportsImmediatePlayback</key><true/> 添加到您的 Info.plist:正在播放可以正确显示,但它会立即开始播放,这不是我想要的。

谁能提供可行的解决方案?

在 iOS14 CarPlay 之前,我们在开始播放后设置正在播放的标识符(在我们的例子中只有一个,因为我们没有播放列表):

  • MPPlayableContentManager.shared().nowPlayingIdentifiers = ["Some Id"]
  • 此 ID 应与启动播放的 MPContentItem 相同(并且 isPlayable 设置为 true