iOS - 未收到UIEventTypeRemoteControl事件

时间:2012-08-23 02:28:12

标签: ios events event-handling uiwindow

我在AppDelegate中有这个(didFinishLaunching):

[[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耳机上的按钮。什么都没有。

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

1 个答案:

答案 0 :(得分:9)

好吧,我生命中的几个小时进入了​​Apple的黑洞。事实证明,您只能在使用AVAudioPlayer播放某种音频后,或者播放具有音频的视频文件时捕获远程控制事件。在here的任何地方都没有记录。

所以在我的情况下,在尝试捕获远程控制事件之前,我必须首先播放一个虚拟静音音频文件。希望这可以帮助有人下线。

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

  

要接收远程控制事件,您的应用必须执行以下三项操作:

     
      
  • 成为第一响应者。呈现多媒体内容的视图或视图控制器必须是第一响应者。
  •   
  • 启用远程控制事件的传送。您的应用必须明确请求开始接收远程控制事件。
  •   
  • 开始播放音频。您的应用必须是“正在播放”应用。重申,即使您的应用程序是第一响应者并且您已经转向   在事件传递上,您的应用程序不会收到远程控制事件   直到它开始播放音频。
  •