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

问题描述

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

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

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

尽管在 iOS 13 上,一切都基于可怕的 MPPlayableContentManager API,并且没有为基于音频的应用程序调用 CPTemplateApplicationSceneDelegate 方法我根本找不到方法检测是否/何时显示“正在播放”屏幕。

MPNowPlayingInfoCenterMPRemoteCommandCenter 已正确配置 - 如上所述 - 但在 iOS 13 上点击 CarPlay 中的“正在播放”图标时,我的应用没有被选中。

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

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

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

解决方法

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...