ios - 使用模拟器测试 CarPlay 音频
问题描述
我使用 Swift / UIKit 开发了一个 iOS 广播音频应用程序,一切正常。
我想与 CarPlay 集成并获得所需的权利。
我相信我大部分都设置正确,因为我可以看到带有我的 CPListItems 的 CPListTemplate 并且在点击其中一个时,它会转到 CPNowPlayingTemplate 并且音频开始在模拟器中播放。
虽然一切似乎都运行良好,但是,有两个问题:
- 我似乎无法与 CPNowPlayingTemplate 播放/暂停按钮进行交互,我只是一直看到播放按钮,但点击它什么也没做
添加此代码后,我可以在设备的锁定屏幕上和通过命令中心执行此操作:
func setupNowPlayingInfoCenter(){
UIApplication.shared.beginReceivingRemoteControlEvents()
MPRemoteCommandCenter.shared().playCommand.isEnabled = true
MPRemoteCommandCenter.shared().playCommand.addTarget { [weak self] event in
self?.reliableRadioPlayer?.play()
return .success
}
MPRemoteCommandCenter.shared().pauseCommand.isEnabled = true
MPRemoteCommandCenter.shared().pauseCommand.addTarget { [weak self] event in
self?.reliableRadioPlayer?.pause()
return .success
}
}
- 第二个问题再次出现在同一个屏幕上,我看不到任何元数据,例如艺术作品、歌曲名称和艺术家姓名 - 借助这些代码行,这些再次显示在设备的锁定屏幕和命令中心:
MPNowPlayingInfoCenter.default().nowPlayingInfo =
[MPMediaItemPropertyTitle: currentlyPlaying.getSongName(),
MPMediaItemPropertyArtist: currentlyPlaying.getSongArtist(),
MPMediaItemPropertyArtwork: artwork]
我是否需要设置其他任何东西,或者这些仅仅是 CarPlay 模拟器的限制?
谢谢
解决方案
虽然我不认为这会是最佳答案,而且有人可能会想出更好的方法,但我认为这里有一些东西可以改进您测试 CarPlay 的方式并解释您可能面临的一些问题:
- 在启动 NowPlayingTemplate 之前添加这两行代码
#if targetEnvironment(simulator)
UIApplication.shared.endReceivingRemoteControlEvents()
UIApplication.shared.beginReceivingRemoteControlEvents()
#endif
- 玩家状态无法准确反映在模拟器上
当您在 CarPlay 模拟器上启动应用程序并显示正在播放的模板时,很可能您的音频正在播放,但播放器的状态将显示,如果您有一个,这将不会在您的 CPListTemplate 中准确显示 isPlaying 状态
这里没有什么可担心的,因为它在车上运行良好,但是,我建议只需单击播放按钮,这样您就可以在 NowPlayingTemplate 和 CPListTemplate 屏幕中看到活动状态以及动画条
- 在真机上测试
虽然我认为我们大多数人不能仅仅为了测试 CarPlay 而购买汽车,但您可以考虑购买支持 CarPlay 的汽车音响,例如 Sony XAV-AX5500、Sony XAV-AX1005DB 或类似的低端产品
你不能用家里的插头正常给汽车音响供电,所以我建议你在网上播放一些视频来给它供电,但是,这是我发现使用笔记本电脑充电器最简单的一个——基本上我相信你需要 12V 或更高的电压
祝你好运
推荐阅读
- javascript - Thymeleaf 生成的列表在一页上的多个 javascript 计时器
- tensorflow - 在树莓派 (tensorflow) 上进行对象检测的项目
- flutter - 动画切换器与案例条件 Streambuilder 相结合
- pine-script - 如何扩展移动平均线图?
- c++ - 从相同的参数调用 mpz_nextprime 是否正确?
- python - Keep Session Alive Cloudscraper
- powershell - PowerShell 会尝试找出脚本的编码吗?
- python - Opencv加入边界框python
- html - 我们可以使用 inside 吗?如果是,那么标签用它的类替换外部?
- swift - 应用程序快速重建时无法播放视频