在iOS7到来之前,我们注意到了一个问题:来自耳塞或跳板的音乐remote-control
可以劫持我们的音频会话,即使我们将类别设置为 solo-ambient
或其他独家模式。
因此,我们尝试了一些方法:
-
我们试图收回音频会话的所有权。但这要求我们的音频代码知道何时收回它以及从谁那里取回它。我们认为可以让应用程序代码成为远程控制事件的第一响应者,做我们的事情,然后将事件传递给音乐应用程序。但是,我们发现这些事件被第一响应者拘留,并且无法将其推回指挥链。
-
当我们处于
solo-ambient
时,我们试图成为第一共鸣者并一起阻止遥控事件。这在iOS6上工作正常,仍然可以在iOS7中使用耳塞控制,但在iOS7的control center
中失败。control center
似乎完全绕过了remote-control
事件处理程序remoteControlReceivedWithEvent
,我们在其中放置了阻止代码。
我在其他地方读到过一些东西:
您无法阻止音乐应用程序。 不过,您的应用程序可以成为一个(苹果 不会喜欢那样),然后控制中心将控制您的控制中心。
但我没有找到任何关于control center
的文件.如上所述,即使应用程序是第一响应者,控制中心也不会进入正常的远程控制钩子。
另一个报价P
远程控制事件处理使你的应用可以由 控制中心、耳塞等...不是为了让您的应用程序可以吃 所述控制,阻止控制来自所述来源的其他应用程序。它 由于iOS中的错误,仅在iOS6中工作,现已在iOS7中修复
是不是因为使用了这个错误?我发现很难相信,因为我们在这个列表和 Xcode 邮件列表中得到了解决方案,所以我认为这是一个公认的解决方案。
现在我们真的想知道我们是否从一开始就错过了一些东西:
solo-ambient
真的是音频会话的独占模式,还是音乐应用程序是这种排他性的例外?
我们的应用程序如何与remote-control
和谐相处,control center
?
我们在哪里可以找到remote-control
和control center
的最新文档?
在重新构建所有iOS7 SDK后,遥控器已被神秘修复。现在,应用程序代表可以从控制中心接收远程控制事件。但是,播放/暂停事件是 UIEventSubtypeRemoteControlPause 和 UIEventSubtypeRemoteControlPlay,而不是 iOS6 的 UIEventSubtypeRemoteControlTogglePlayPause。