8

我在这上面花了两天时间,却一无所获。我正在尝试使用 [MPMusicPlayerController applicationMusicPlayer] 播放从用户的 iPod 库中选择的音频并让它在后台运行并支持远程事件。现在让音乐真正播放是很容易的部分。获取实例,选择歌曲,分配音乐队列并播放。做完了。但是...a)我无法让它在后台播放,b)即使在前台我也无法让远程控制事件工作!

在你问之前,是的,我已经设置了 plist 条目、音频会话类别、说我有兴趣获取远程事件的电话并设置了第一响应者来监听它们,所以请知道,是的,我已经阅读了我能找到的关于该主题的每一个文档*(*我责怪 Apple 的一项任务,因为它在这个主题上一点也不清晰,也没有任何示例代码!)我看过每一篇与它相关的 WWDC 视频(甚至冻结屏幕以完全从他们的示例中复制代码......)所以除非我错过了不在此列表中的内容,否则回复任何这些答案都无济于事。

还有一件事......我明确谈论使用 MPMusicPlayerController 根据文档,它从不使用应用程序会话。它总是使用系统会话。(也许这本身就回答了我的问题,但文档并没有明确说明,所以我不确定,因此这个问题。)

也就是说,两天后,我的想法是这样的:

  1. 使用 MPMusicPlayerController 时,无论您调用什么方法或设置什么 plist 条目,您的应用都不会在后台运行。时期。如果您使用 ipodMusicPlayer 实例,音乐会继续播放,但那是因为播放的是 iPod,而不是您的应用程序。如果您改用 applicationMusicPlayer 实例,则在进入后台时,您的音乐将停止。在这两种情况下,您的应用都会被暂停。

  2. 无论您使用 ipodMusicPlayer 或 applicationMusicPlayer 实例,所有远程事件都会转到 iPod 应用程序本身,而不是您的,即使您已明确要求它们。如果您正在使用 applicationMusicPlayer 实例并且您使用遥控器选择“播放”,则 iPod 应用程序会收到该命令,因此您的音频会消失并被中断,并在 iPod 应用程序中开始播放。如果您选择了 ipodMusicPlayer,那么当然没关系,因为您已经明确表示您基本上只是对远程控制 iPod 应用程序感兴趣,这又是实际接收远程事件的内容。

  3. 底部快速切换控件中的图标永远不会更改为您的应用程序的图标,因为您的应用程序从未真正设置为接收事件。iPod 应用程序是,这就是它的图标确实出现在那里的原因。

所以我想知道的是……我错了吗?有没有人成功使用 MPMusicPlayerController 并能够拦截远程事件?虽然我更喜欢使用带有背景音乐支持的 applicationMusicPlayer,所以我不会使用用户的 iPod,但更重要的是远程控制通知,这意味着如果我必须使用 ipodMusicControl 并将我的应用程序保持在前台以拦截那些消息,就这样吧。那样很难看,但至少它是一些东西。

非常感谢代码示例或至少针对内置应用程序模板之一的明确步骤。(甚至不需要实施......只是步骤。希望这将安抚人们不断回答问题的不可避免的“它仍在 NDA 之下”的事情。)

标记

4

2 回答 2

8

我解决了。该信息在我的另一个问题中...

Stack Overflow:在接收远程控制事件的同时播放 iPod 音乐

...但简短的版本是您必须使用 AVPlayer(但不是 AVAudioPlayer。不知道为什么会这样!)与您从库中获得的 MPMediaItem 的资产 URL,然后将音频会话的类别设置为可播放(不要启用可混合!)并将适当的键添加到您的 info.plist 文件中,告诉操作系统您的应用程序想要支持背景音频。

这使您可以播放 iPod 库中的项目(出于某种原因,Audible.com 文件除外!)并且仍然可以获取远程事件。当然你必须做更多的工作,因为这是你的音频播放器,它与 iPod 应用程序是分开的,并且会中断 iPod 应用程序(这可能是可取的,也可能是不可取的。同样,不要启用混音,否则 iPod 应用程序会劫持远程控制事件)但这些是休息时间!

于 2010-07-09T06:33:33.503 回答
2

对于任何想知道的人,我发现要在后台播放音频,您必须将音频会话的类别设置为可播放,然后背景音频就可以正常工作。如果您还想同时播放自己的声音,则必须将类别标记为可混合。这解决了背景音乐部分。但我发现,在 iPod 播放的任何时候,您似乎都无法获得远程通知。

这是更新的线程...

如何在您的应用程序中接收远程控制事件的同时从 iPod 应用程序播放音乐?

于 2010-07-07T02:55:13.617 回答