2012-08-23 38 views
4

我有这样的AppDelegate中(didFinishLaunching):iOS的 - 没有收到UIEventTypeRemoteControl事件

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

我试图处理事件相关视图控制器,但那是参差不齐(有些视图控制器将获得的事件和其他即使他们是第一响应者也不会)。我试过UIApplication的子类。这没有用。现在,我想继承一个UIWindow和做到这一点(见注释):

- (void)sendEvent:(UIEvent *)event { 
if (event.type == UIEventTypeRemoteControl) { 
    NSLog(@"I wish this happened"); //this never happens 
} 
else 
{ 
    NSLog(@"some other event"); //this does happen on any other interaction 
    [super sendEvent:event]; 
} 
} 

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { 

if (receivedEvent.type == UIEventTypeRemoteControl) { 
    NSLog(@"got remote event"); // this never happens either 
    switch (receivedEvent.subtype) { 

     case UIEventSubtypeRemoteControlTogglePlayPause: 
     { 
      NSLog(@"handle play/pause"); 
      break; 
     } 


     default: 
      break; 
    } 
} 
} 

我试图既没有这种在信息的plist:

<key>UIBackgroundModes</key> 
<array> 
     <string>audio</string> 
</array> 

不有所作为。正如Apple文档所述,您可以使用音频控件模拟远程控制事件(双击主页按钮并滚动到底部)。当我按播放或暂停时,它只播放来自我的iTunes资料库的音频。我也尝试了Apple耳机上的按钮。没有。

我想要做的就是检测遥控器上的播放/暂停按钮,并处理事件。我还需要做些什么来抓住这些事件?

回答

8

好吧,我的生活还有几个小时进入苹果黑洞。事实证明,只有使用AVAudioPlayer播放某种类型的音频后,或者播放具有音频的视频文件后,才能捕获远程控制事件。这是没有记录在任何地方here

所以在我的情况下,我必须首先播放一个虚拟的无声音频文件,然后才能尝试捕捉远程控制事件。希望这可以帮助某个人。

(更新)请注意updated documentation现声明如下:

接收远程控制的事件,您的应用程序必须做三两件事:

  • 是第一个响应者。呈现多媒体内容的视图或视图控制器必须是第一响应者。
  • 打开遥控事件的传送。您的应用必须明确要求开始接收远程控制事件。
  • 开始播放音频。您的应用必须是“正在播放”应用。重申,即使您的应用程序是第一响应者,并且您在事件传送时已变为 ,但您的应用程序在开始播放音频之前不会收到远程控制事件 。
+0

这正是我的问题。非常感谢......将永远需要弄清楚。 –

+0

在iOS 6+中不起作用。我在锁定屏幕上看到我的应用正在播放的信息,但仍然没有按暂停/播放的事件。 – openfrog

+0

而且没有意义:如果使用AVAudioPlayer,则没有视图控制器“呈现它”。它是一个播放音频并没有超视图的类。 – openfrog