我在这上面花了两天时间,却一无所获。我正在尝试使用 [MPMusicPlayerController applicationMusicPlayer] 播放从用户的 iPod 库中选择的音频并让它在后台运行并支持远程事件。现在让音乐真正播放是很容易的部分。获取实例,选择歌曲,分配音乐队列并播放。做完了。但是...a)我无法让它在后台播放,并且b)即使在前台我也无法让远程控制事件工作!
在你问之前,是的,我已经设置了 plist 条目、 Audio Session 类别、说我有兴趣获取远程事件的电话并设置了第一响应者来监听它们,所以请知道,是的,我我已经阅读了我能找到的关于该主题的每一个文档*(*我责怪 Apple 的一项任务,因为它在这个主题上一点也不清晰,也没有任何示例代码!)而且我看过每一篇与它相关的 WWDC 视频(甚至卡住屏幕以完全从他们的示例中复制代码......)所以除非我错过了不在此列表中的内容,否则回复任何这些答案都无济于事。
还有一件事......我明确谈论使用 MPMusicPlayerController 根据文档,它从不使用应用程序 session 。它总是使用系统 session 。 (也许这本身就回答了我的问题,但文档并没有明确说明,所以我不确定,因此这个问题。)
也就是说,两天后,我的想法是这样的:
所以我想知道的是……我错了吗?有没有人成功使用 MPMusicPlayerController 并能够拦截远程事件?虽然我更喜欢使用带有背景音乐支持的 applicationMusicPlayer,所以我不会使用用户的 iPod,但更重要的是远程控制通知,这意味着如果我必须使用 ipodMusicControl 并将我的应用程序保持在前台来拦截那些消息,就这样吧。那样很难看,但至少它是一些东西。
非常感谢代码示例或至少针对内置应用程序模板之一的明确步骤。 (甚至不需要实现......只是步骤。希望这将安抚人们不断回答问题的不可避免的“它仍在 NDA 之下”的事情。)
标记
最佳答案
我解决了。该信息在我的另一个问题中...
Stack Overflow: Play iPod music while receiving remote control events
...但简短的版本是您必须使用 AVPlayer(但不是 AVAudioPlayer。不知道为什么会这样!)与您从库中获得的 MPMediaItem 的 Assets URL,然后将 Audio Session 的类别设置为可播放(不要启用可混合!)并将适当的键添加到您的 info.plist 文件中,告诉操作系统您的应用程序想要支持背景音频。
这使您可以播放 iPod 库中的项目(出于某种原因,Audible.com 文件除外!)并且仍然可以获取远程事件。当然你必须做更多的工作,因为这是你的音频播放器,它与 iPod 应用程序是分开的,并且会中断 iPod 应用程序(这可能是可取的,也可能是不可取的。同样,不要启用混音,否则 iPod 应用程序会劫持远程控制事件)但这些是休息时间!
关于ios4 - 在 iOS 4 上使用 MPMusicPlayerController 支持后台音频和远程控制。这甚至可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175974/