iOS7:控制中心,远程控制和CoreAudio音频会话独奏环境类别

时间:2013-10-30 19:37:52

标签: ios7 core-audio remote-control control-center

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

我们尝试了一些事情:

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

  2. 当我们在solo-ambient时,我们试图成为第一个共鸣者并阻止遥控事件。这适用于iOS6,仍然适用于iOS7中的耳塞控制,但是在iOS7的control center中失败了。 control center似乎完全绕过了remote-control事件处理程序remoteControlReceivedWithEvent,我们在其中放置了阻止代码。

  3. 我在其他地方读到了一些内容:

      

    您无法阻止音乐应用。你的应用程序可以成为一个(苹果   不会那样)然后控制中心会控制你的。

    但我没有找到关于control center的任何文件。 如上所述,即使应用程序是第一响应者,控制中心也不会进入正常的远程控制挂钩。

    另一个报价

      

    远程控制事件处理是可以控制您的应用程序的   控制中心,耳塞等......你的应用程序不能吃   表示控件,阻止从所述来源控制其他应用程序。它   仅在iOS6中有效,因为iOS中存在错误,现已在iOS7中修复

    是否正在使用的是由于这个错误?我觉得很难相信,因为我们在这个列表和Xcode邮件列表上得到了解决方案,所以我认为这是一个公认的解决方案。

    现在我们真的很想知道我们是否从一开始就错过了一些东西:

    solo-ambient真的是音频会话的独家模式,还是音乐应用程序是该排他性的例外?

    我们的应用如何与remote-controlcontrol center保持一致?

    我们在哪里可以找到remote-controlcontrol center的最新文档?

1 个答案:

答案 0 :(得分:0)

在iOS7 SDK上再次清理后,遥控器已经神秘地修复了。现在,app delegate可以从Control Center接收远程控制事件。但是,播放/暂停事件是UIEventSubtypeRemoteControlPause和UIEventSubtypeRemoteControlPlay,而不是iOS6的UIEventSubtypeRemoteControlTogglePlayPause。