4

我在 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;
    }
}
}

我在 info plist 中尝试了有和没有这个:

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

没什么区别。正如 Apple 文档所述,您可以使用音频控件模拟远程控制事件(双击主页按钮并在底部滚动到它们)。当我按下播放或暂停时,它只会播放我的 iTunes 资料库中的音频。我也试过苹果耳机上的按钮。没有。

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

4

1 回答 1

9

好的,我的生命中还有几个小时进入了​​苹果的黑洞。事实证明,您只能在使用 AVAudioPlayer 播放某种音频或播放有音频的视频文件后才能捕获远程控制事件。这在此处没有记录。

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

(更新)请注意,更新后的文档现在声明如下:

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

  • 成为第一响应者。呈现多媒体内容的视图或视图控制器必须是第一响应者。
  • 打开远程控制事件的传递。您的应用必须明确请求开始接收远程控制事件。
  • 开始播放音频。您的应用必须是“正在播放”应用。重申,即使您的应用程序是第一响应者并且您已打开事件传递,您的应用程序在开始播放音频之前不会接收远程控制事件。
于 2012-08-23T03:41:44.373 回答