问题描述
我的应用程序已经是手机上当前的“正在播放的应用程序”(即所有必需的信息都提供给MPNowPlayingInfoCenter
)并且它在锁定屏幕中正确显示,包括艺术家姓名、曲目标题、艺术作品图片等
根据文档,填充 MPNowPlayingInfoCenter.default().NowPlayingInfo
并将正确的目标/操作添加到 MPRemoteCommandCenter
应该足以确保您的应用在用户点击时在 CarPlay 中调用在 Now Playing
图标上。
在 iOS 14 上,我设法通过将 CPNowPlayingTemplate
推送到堆栈来实现上述目标,这要归功于我发现的一些巧妙技巧 in this article。
尽管在 iOS 13 上,一切都基于可怕的 MPPlayableContentManager
API,并且没有为基于音频的应用程序调用 CPTemplateApplicationSceneDelegate
方法我根本找不到方法检测是否/何时显示“正在播放”屏幕。
MPNowPlayingInfoCenter
和 MPRemoteCommandCenter
已正确配置 - 如上所述 - 但在 iOS 13 上点击 CarPlay 中的“正在播放”图标时,我的应用没有被选中。
我认为 this API 会帮助我,但我不知道如何(它总是返回一个空数组)。
唯一的解决方法似乎是将 <key>UIbrowsableContentSupportsImmediatePlayback</key><true/>
添加到您的 Info.plist
:Now Playing 正确显示,但它立即开始播放,这不是我想要的。
谁能提供可行的解决方案?
解决方法
在 iOS 14 之前的 CarPlay 上,我们在开始播放后设置正在播放的标识符(在我们的例子中只有一个,因为我们没有播放列表):
MPPlayableContentManager.shared().nowPlayingIdentifiers = ["Some Id"]
- 此 ID 应与启动播放的
MPContentItem
的 ID 相同(并将isPlayable
设置为true