iOS7:控制中心、遥控器和 CoreAudio 音频会话独奏环境类别



在iOS7到来之前,我们注意到了一个问题:来自耳塞或跳板的音乐remote-control可以劫持我们的音频会话,即使我们将类别设置为 solo-ambient 或其他独家模式。

因此,我们尝试了一些方法:

  1. 我们试图收回音频会话的所有权。但这要求我们的音频代码知道何时收回它以及从谁那里取回它。我们认为可以让应用程序代码成为远程控制事件的第一响应者,做我们的事情,然后将事件传递给音乐应用程序。但是,我们发现这些事件被第一响应者拘留,并且无法将其推回指挥链。

  2. 当我们处于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-controlcontrol center的最新文档?

在重新构建所有iOS7 SDK后,遥控器已被神秘修复。现在,应用程序代表可以从控制中心接收远程控制事件。但是,播放/暂停事件是 UIEventSubtypeRemoteControlPause 和 UIEventSubtypeRemoteControlPlay,而不是 iOS6 的 UIEventSubtypeRemoteControlTogglePlayPause。

最新更新