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

Mar*_*eIV 9 iphone remote-control ios4

好吧,我试图让用户从他们的iPod库中选择歌曲来收听,但我仍然希望在我的应用程序中接收远程控制通知(耳机,锁屏osd等),这样我就可以做一些额外的事情.到目前为止,我可以播放iPod音乐或耳机事件,但不能同时播放.

这是我到目前为止所知道的......

  1. 如果您使用MPMusicPlayer,则可以轻松地以编程方式访问整个音乐库.但是,无论您使用的是applicationMusicPlayer还是ipodMusicPlayer,它都会收到远程通知.

  2. 如果您使用AVAudioPlayer(Apple推荐的播放器用于您应用中的大多数声音),您可以轻松获得远程通知,但它本身无法访问iPod库.

  3. 可以使用资产URL初始化AVAudioPlayer,并且iPod库中的轨道(类型MPMediaItem)确实有一个URL属性,该属性返回NSURL实例,文档明确表示它与AVAsset对象一起使用,但是当您尝试使用该文件初始化AVAudioPlayer时NSURL,它失败了.(我使用iPod中的"正在播放"轨道,这是一个MP3,它确实返回了一个有效的NSURL对象,但是初始化失败了.更糟糕的是,当它是一个Audible.com文件时,NSURL属性平坦无效.)

  4. 如果您尝试使用AVAudioPlayer的实例来获取远程事件(例如,使用空白声音文件),然后同时使用MPMusicPlayer类播放iPod音乐,您可以远程控制访问,直到您实际启动iPod播放,此时您将丢失它因为您的音频会话被取消激活并且系统音频会话变为活动状态.

  5. 如果您尝试与#4相同,但是您将音频会话的类别设置为可混合变体,则会话不会被取消激活,但是一旦iPod开始播放,您仍然会失去远程控制功能.

简而言之,每当MPMusicPlayer正在播放时,我似乎无法获得远程事件,除了使用MPMusicPlayer之外,我不知道从iPod库中播放内容的任何其他方式.

关于如何解决这个问题的任何建议都会受到欢迎.创意或平淡疯狂.只要它有效,就不要在意.

任何人?任何人?Bueller?Bueller?

中号

Mar*_*eIV 16

哈!解决了!我知道这是可能的!(感谢Async-games.com的支持!)

以下是如何在您的应用中播放iPod音乐,具有后台支持,以及您的应用接收遥控器通知.

您必须使用AVPlayer(但不是AVAudioPlayer.不知道为什么会这样!)使用您从库选取器(或MPMusicPlayerController中的当前项或任何地方)获得的MPMediaItem中的资产URL进行初始化,然后将音频会话的类别设置为Playable (不要启用混音覆盖,否则您将丢失远程事件!)并将相应的键添加到info.plist文件中,告诉操作系统您的应用程序想要支持背景音频.

做完了!

这使您可以在后台播放iPod库中的项目(Audible.com文件除外,出于某种原因!),并且仍然可以获得远程事件.因为这是你的音频播放器,它是独立的,并且会打断iPod应用程序,你必须做更多的工作,但这些都是休息!

该死的但是...我只是希望它与Audible.com文件一起使用.(对于那些感兴趣的人,原因不是声音文件的资产URL返回nil.很糟糕!但是你能做什么!)

  • 哇.感谢您写得非常详细的解释.并且组织得很漂亮.我正在休闲音乐游戏中播放用户的音频文件,以响应他们从提示中选择的内容.我也使用`[MPMusicPlayerController iPodMusicPlayer]`来播放音频文件,但实现了那种俗气.我试图弄清楚如何为`applicationMusicPlayer`启用后台处理,但无法弄明白.这提供了我需要的100%答案.你刚刚救了我一夜.非常感谢你的不可思议的答案.你得到了很多赞成:) (2认同)