使用模拟器测试 CarPlay 音频

如何解决使用模拟器测试 CarPlay 音频

我使用 Swift / UIKit 开发了一个 iOS 收音机音频应用,一切正常。

我想与 CarPlay 集成并获得所需的权利。

我相信我已经大部分设置正确,因为我可以看到带有我的 CPListItems 的 CPListTemplate,并且在点击其中一个时,它会转到 CPNowPlayingTemplate 并且音频开始在模拟器中播放。

虽然一切似乎都运行良好,但是有两个问题:

  1. 我似乎无法与 CPNowPlayingTemplate 播放/暂停按钮交互,我只是一直看到播放按钮,但点击它什么也不做

CarPlay Simulator

添加代码后,我可以在设备的锁定屏幕上和通过命令中心执行此操作:

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
    }
  }
  1. 第二个问题再次出现在同一屏幕上,我看不到任何元数据,例如艺术作品、歌曲名称和艺术家姓名 - 借助这些,这些再次显示在设备的锁定屏幕和命令中心上代码行:
MPNowPlayingInfoCenter.default().NowPlayingInfo = 
[MPMediaItemPropertyTitle: currentlyPlaying.getSongName(),MPMediaItemPropertyArtist: currentlyPlaying.getSongArtist(),MPMediaItemPropertyArtwork: artwork]

我是否需要设置其他任何东西,或者这些只是 CarPlay 模拟器的限制?

谢谢

解决方法

虽然我认为这不是最佳答案,而且有人可能会提出更好的答案,但我相信以下几点可以改善您测试 CarPlay 的方式并解释您可能面临的一些问题:

  1. 在启动 NowPlayingTemplate 之前添加这两行代码
#if targetEnvironment(simulator)
    UIApplication.shared.endReceivingRemoteControlEvents()
    UIApplication.shared.beginReceivingRemoteControlEvents()
#endif

我立即看到模拟器显示的元数据有一些改进 Swift CarPlay NowPlayingTemplate

  1. 玩家状态没有准确反映在模拟器上

当您在 CarPlay 模拟器上启动应用程序并显示正在播放的模板时,很可能您的音频正在播放,但播放器的状态将显示,如果你有一个

Swift CarPlay NowPlayingTemplate Status stopped Swift CarPlay CPListTemplate CPListItem isPlaying false

这里没有什么可担心的,因为它在汽车中运行良好,但是,我建议您只需单击播放按钮,即可在 NowPlayingTemplate 和 CPListTemplate 屏幕中看到活动状态,并带有动画条

Swift CarPlay NowPlayingTemplate Status playing Swift CarPlay CPListTemplate CPListItem isPlaying true

  1. 在真实设备上测试

虽然我认为我们大多数人不会为了测试 CarPlay 而购买汽车,但您可以考虑购买支持 CarPlay 的汽车音响,例如 Sony XAV-AX5500、Sony XAV-AX1005DB 或其他东西lower end like this

您无法在家中使用插头正常为汽车音响供电,因此我建议您在 YouTube 上播放一些视频来为其供电,但是,this was the easiest one I found using a laptop charger - 基本上我认为您需要 12V 或更高电压的电源

祝你好运

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?