代码之家  ›  专栏  ›  技术社区  ›  Mark A. Donohoe

使用iOS 4上的MPMusicPlayerController支持背景音频和远程控制。这是可能的吗?

  •  8
  • Mark A. Donohoe  · 技术社区  · 14 年前

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

    在你问之前,是的,我已经设置了plist条目、音频会话类别、呼叫来表示我对获取远程事件感兴趣,并设置了第一响应者来监听这些事件,所以请知道,是的,我已经阅读了关于我能找到的主题的每一个文档*(*我责怪苹果在这个主题上完全不清楚的任务,也没有任何示例代码!)我看过所有与之相关的WWDC视频(甚至冻结屏幕,从他们的示例中复制代码…)所以除非我错过了什么 不在此列表中 用这些答案来回答是没有帮助的。

    还有一件事…我正在明确地讨论使用MPMusicPlayerController,根据文档,它从不使用应用程序会话。它总是使用系统会话。(也许这本身就回答了我的问题,但是医生们没有明确地说出来,所以我不确定,所以这个问题。)

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

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

    2. 不管您使用iPod音乐播放器或应用程序音乐播放器实例,所有远程事件都会转到iPod应用程序本身,而不是您的应用程序,即使您明确要求它们。如果您使用applicationMusicPlayer实例并使用遥控器选择“播放”,则iPod应用程序会收到命令,使您的音频退出并中断,然后在iPod应用程序中开始播放。如果你选择了iPod音乐播放器,那么当然,这并不重要,因为你已经明确地说,你基本上只是想远程控制iPod应用程序,这也是实际接收远程事件的方法。

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

    所以我想知道的是…我错了吗?是否有人能够成功地使用MPMusicPlayerController并能够拦截远程事件?虽然我更喜欢使用支持背景音乐的应用程序MusicPlayer,这样我就不会干扰用户的iPod,但更重要的是远程控制通知,这意味着如果我必须使用iPod MusicControl并将我的应用程序放在前台来截取这些消息,那就顺其自然吧。那样很难看,但至少有点难看。

    代码示例,或者至少是针对某个内置应用程序模板的显式步骤将非常受欢迎。(甚至不需要实施…只有台阶。希望这能安抚人们不断回答问题时不可避免的“仍在保密协议之下”的问题。)

    作记号

    2 回复  |  直到 14 年前
        1
  •  8
  •   Community Mr_and_Mrs_D    7 年前

    我解决了它。信息在我的另一个问题里…

    Stack Overflow: Play iPod music while receiving remote control events

    …但简短的版本是你必须使用avplayer(而不是avaudioplayer)。不知道为什么!)使用从库中获得的mpmediaitem的资源URL,然后将音频会话的类别设置为可播放(不要启用mixable!)并在info.plist文件中添加相应的键,告诉操作系统您的应用程序希望支持后台音频。

    这允许您播放iPod库中的项目(出于某种原因,audible.com文件除外!)还有远程事件。当然,你必须做更多的工作,因为这是你的音频播放器,它是分开的,并将中断iPod应用程序(这可能是或可能是不可取的)。同样,不要启用混合,否则iPod应用程序将劫持遥控器事件),但这些都是中断!

        2
  •  2
  •   Community Mr_and_Mrs_D    7 年前

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

    这是更新的线程…

    How can you play music from the iPod app while still receiving remote control events in your app?

    推荐文章