iOS - 未收到UIEventTypeRemoteControl事件

sol*_*eil 4 events event-handling uiwindow ios

我在AppDelegate中有这个(didFinishLaunching):

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
Run Code Online (Sandbox Code Playgroud)

我尝试在相关的视图控制器中处理事件,但这很不稳定(一些视图控制器会获得事件,而其他视图控制器则不会,即使它们是第一响应者).我尝试了子类化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;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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

<key>UIBackgroundModes</key>
<array>
        <string>audio</string>
</array>
Run Code Online (Sandbox Code Playgroud)

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

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

sol*_*eil 9

好吧,我生命中的几个小时变成了苹果的黑洞.事实证明,您只能在使用AVAudioPlayer播放某种音频后,或者播放具有音频的视频文件时捕获远程控制事件.这不是任何地方记录在这里.

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

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

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

  • 成为第一个响应者.呈现多媒体内容的视图或视图控制器必须是第一响应者.
  • 打开远程控制事件的传递.您的应用必须明确请求开始接收远程控制事件.
  • 开始播放音频.您的应用必须是"正在播放"应用.重申,即使您的应用程序是第一响应者并且您已打开事件传递,您的应用程序在开始播放音频之前不会接收远程控制事件.