如何阻止iOS 7控制中心控制音乐应用程序?

我们的应用程序通过成为远程控制事件的第一响应者,使用远程控制(例如iOS7以前的旧式跳板,耳塞式)明确阻止用户表单。 但是,在iOS7上,相同的代码无法绕过控制中心的音乐控制。

从testing中,控制中心似乎已经绕过了所有的音乐控制事件,包括UIEventSubtypeRemoteControlPause和UIEventSubtypeRemoteControlPlay,以及UIEventSubtypeRemoteControlTogglePlayPause。

控制中心是否有其自己的远程控制协议,或者在iOS7中截取远程控制事件的方式已经改变了?

相同的阻止代码仍然适用于iOS6设备。 以下是我们的工作:

  1. 在我们的appDelegate中添加了一个方法:

    (BOOL)canBecomeFirstResponder {return YES; }

  2. 在applicationDidBecomeActive中调用这个:

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

    //将自己设置为第一响应者[self becomeFirstResponder];

  3. 在applicationWillResignActive中调用这个

    //closures远程控制事件传递[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

    //作为第一响应者[resignFirstResponder];

  4. 最后补充说

(void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {

if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause: NSLog(@"Received: UIEventSubtypeRemoteControlTogglePlayPause\n"); break; case UIEventSubtypeRemoteControlPreviousTrack: NSLog(@"Received: UIEventSubtypeRemoteControlPreviousTrack\n"); break; case UIEventSubtypeRemoteControlNextTrack: NSLog(@"Received: UIEventSubtypeRemoteControlNextTrack\n"); break; case UIEventSubtypeRemoteControlPlay: NSLog(@"Received: UIEventSubtypeRemoteControlPlay\n"); break; case UIEventSubtypeRemoteControlPause: NSLog(@"Received: UIEventSubtypeRemoteControlPause\n"); break; case UIEventSubtypeRemoteControlStop: NSLog(@"Received: UIEventSubtypeRemoteControlStop\n"); break; default: NSLog(@"Received: Some remove control events\n"); break; } } } 

任何指针将不胜感激。

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

我想我对发生的事情有了更好的了解,至less在CoreAudio层面。

当应用程序的audio会话类别是独奏环境时,音乐应用程序的播放事件会触发类似于闹钟或电话的audio会话中断。 这将触发应用程序的audio会话中断侦听器callback与“进入中断”状态。

但是,音乐应用程序的暂停事件不会触发具有“退出中断”状态的侦听器callback,正如人们所期望的那样。 这个缺less的退出调用有效地冻结了我们应用的audio会话。 退出控制中心也不会触发它。 同样的事情适用于物理遥控器,除了物理遥控器可以使用我上一封电子邮件中说的firstResponder技巧来阻止。 它不适用于控制中心。

除非我错过了一些明显的东西,否则我更加确信CoreAudio或命令链中的其他框架有两个缺陷。

错误1:如果首先进入入口呼叫,audio会话中断监听器的退出呼叫不能由音乐遥控器进行。

错误2:控制中心的音乐遥控器不符合远程控制事件机制。

我很惊讶,没有人报道过这个。

我想我会提交一个错误报告,除非有人提出不同的build议。

更新错误2是一个虚惊。 经过几次清理重buildiOS7 SDK的一切后,我们发现问题消失了。 错误1仍然成立。