问题标签 [mpplayablecontentdelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
361 浏览

ios - Carplay:从未调用过 MPPlayableContentDelegate 方法

实现后MPPlayableContentDelegate,将其设置为委托MPPlayableContentManager,我发现委托方法在设备上或iOS模拟器中运行时永远不会被调用。来自MPPlayableContentDataSource显示的数据正确显示,但是当我选择标记为 的项目时playable,我看到一个微调器,然后显示消息“加载此内容时出现问题”。由于我没有任何窗口可以了解“MPPlayableContentManager”内部发生的事情,因此很难调试。

相当不同寻常的是,不久前这一切对我来说都是成功的,并且恢复到我的应用程序的旧版本并不能解决问题,这表明这是由于最近的工具变化,或者(很可能)可能是一个不相关的问题我的结局。

任何帮助,将不胜感激。

0 投票
1 回答
1528 浏览

ios - 使用 MPNowPlayingInfoCenter 处理 CarPlay 中的播放事件

我正在尝试使用 CarPlay 集成构建示例音频应用程序。该应用程序是一个测试项目 - 没有 API,没有流媒体,没有复杂的 UI。只是一个简短的歌曲标题列表,具有选择一个并播放它的功能。我的目标是在“正在播放”屏幕上按下播放按钮并播放文件时处理回调。

我在设置 MPPlayableContentManager、MPPlayableContentDataSource 和 MPPlayableContentDelegate 时没有任何问题。我的内容是从 JSON 文件中解析出来的,它可以正确显示在模拟器的屏幕上。

此代码提供以下图形输出:

CarPlay 模拟器

这两个选项卡包含两个播放列表。每个播放列表都有许多歌曲。

当我点击一首歌曲时,该应用程序将成为“正在播放”应用程序,但前提是我在用户与该行交互时已经开始和结束接收远程控制事件。

当检测到点击表格行时调用initialPlaybackOfContentItemAt方法。

如果我希望应用程序转换到“正在播放”屏幕,这是唯一适用于我的代码。如果我将任何 UIApplication 方法放在其他任何地方,应用程序将退出对行触摸的响应并且不会进入“正在播放”屏幕。

但是,我猜是因为我正在调用endReceivingRemoteControlEvents(),所以我无法获得不同事件的回调。现在播放信息已设置,我可以在 UI 中看到播放按钮,但是当我按下它时,回调不会执行。

现在播放画面

我究竟做错了什么?

这可能与我在模拟器上测试的事实有关吗?这可以在真实设备上使用吗?

如果有人可以阐明如何正确设置 CarPlay 集成以进入“正在播放”屏幕并响应事件,请分享。我很难找到任何可用的代码示例或示例。

我知道我可以,但我没有申请 CarPlay 权利,因为这个项目仅用于研究目的,我非常怀疑我会获得批准。

0 投票
1 回答
65 浏览

carplay - 如何识别用户何时点击容器?(车载)

我已经实现了 MPPlayableContentDataSource 协议。它有一个方法

每当屏幕上显示某个容器或用户点击某个容器时,head unit 都会调用此方法。

如何识别谁初始化了该方法的调用?(用户通过水龙头或主机)

0 投票
1 回答
333 浏览

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

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

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

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

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

MPNowPlayingInfoCenter并且MPRemoteCommandCenter配置正确 - 如上所述 - 但在 iOS 13 上点击 CarPlay 中的“正在播放”图标时,我的应用程序没有被拾取。

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

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

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