Ios4 在iOS 4上使用MPMusicLayerController支持后台音频和远程控制。这可能吗?

Ios4 在iOS 4上使用MPMusicLayerController支持后台音频和远程控制。这可能吗?,ios4,ipod,mpmusicplayercontroller,remote-control,background-application,Ios4,Ipod,Mpmusicplayercontroller,Remote Control,Background Application,我花了两天的时间在这上面,却一无所获。我正在尝试使用[MPMusicLayerController应用程序MusicLayer]播放从用户的iPod库中选择的音频,并使其在后台运行,同时支持远程事件。现在让音乐真正播放是很容易的。获取实例,选择歌曲,分配音乐队列并播放。做了,做了。但是a) 我无法让它在后台播放,并且b)即使在前台,我也无法让遥控事件工作 在您提问之前,是的,我已经设置了plist条目、音频会话类别、呼叫,以表示我对获取远程事件感兴趣,并设置了第一响应者来收听这些事件,所以请知道

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

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

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

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

  • 使用MPMusicLayerController时,无论您调用什么方法或设置什么plist条目,您的应用程序都不会在后台运行。句号。如果您使用iPodMusicLayer实例,音乐会继续播放,但这是因为播放的是iPod,而不是您的应用程序。如果您使用ApplicationMusicLayer实例广告,当你进入后台时,你的音乐停止。在这两种情况下,你的应用程序都被挂起

  • 无论您使用的是iPodMusicLayer还是ApplicationMusicLayer实例,所有远程事件都会转到iPod应用程序本身,而不是您的应用程序,即使您已明确要求这些事件。如果您使用的是ApplicationMusicLayer实例,并且您使用遥控器选择“播放”,iPod应用程序会收到该命令,因此您的音频会自动退出d被中断,播放开始在iPod应用程序中。如果您选择了iPod音乐播放器,那么当然这并不重要,因为您明确表示,您基本上只对远程控制iPod应用程序感兴趣,而iPod应用程序实际上接收远程事件

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

  • 所以我想知道的是…我错了吗?有人成功地使用了MPMusicLayerController并截获了远程事件吗?虽然我更喜欢使用支持背景音乐的ApplicationMusicLayer,这样我就不会弄脏用户的iPod,但更重要的是远程控制通知,这意味着如果我有使用ipodMusicControl并将我的应用程序保留在前台以拦截这些消息,就这样吧。这样做很难看,但至少是有意义的

    代码示例,或者至少针对其中一个内置应用程序模板的明确步骤,将不胜感激。(甚至不需要实现……只需要步骤。希望这将平息人们不断回答问题的不可避免的“仍在保密协议下”的情况。)


    标记

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

    这是更新的线程


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

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


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

    这家伙是怎么做到的???啊!!!嗨,你是如何在后台录制音频的?非常感谢你发布这篇文章!没问题。真让人沮丧的是,苹果没有更清楚地了解那里发生了什么。更让人沮丧的是(尽管出于DRM原因可以理解)你不能这样做音频文件,这破坏了我们的应用程序,因为这是我们的主要关注点。你能做什么呢!不过,很高兴这有帮助。