问题描述
我使用 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 模拟器上启动应用程序并显示正在播放的模板时,很可能您的音频正在播放,但播放器的状态将显示,如果你有一个
这里没有什么可担心的,因为它在汽车中运行良好,但是,我建议您只需单击播放按钮,即可在 NowPlayingTemplate 和 CPListTemplate 屏幕中看到活动状态,并带有动画条
- 在真实设备上测试
虽然我认为我们大多数人不会为了测试 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 或更高电压的电源
祝你好运