无法接收remoteControlReceivedWithEvent – 目标c – ios

屏幕locking后,我成功启用了我的应用程序,以便能够在后台播放audio和video。 但是,为了更好的用户体验,我想在locking的屏幕上显示播放和暂停正在运行的媒体的控件。 在线跟随几个博客之后,添加了以下代码:

@interface MyControllerClass () <UIGestureRecognizerDelegate, UIApplicationDelegate> - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset]; AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; NSError *activationError = nil; BOOL success = [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; } - (void)viewWillDisappear:(BOOL)animated { [[UIApplication sharedApplication] endReceivingRemoteControlEvents]; [self resignFirstResponder]; [super viewWillDisappear:animated]; } - (BOOL) canBecomeFirstResponder { return YES; } - (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { NSLog(@"received event %@",receivedEvent); if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause: { if ([self isVideoPlaying]) { [self.avPlayer pause]; } else { [self.avPlayer play]; } break; } case UIEventSubtypeRemoteControlPlay: { [self.avPlayer play]; break; } case UIEventSubtypeRemoteControlPause: { [self.avPlayer pause]; break; } default: break; } } } 

在info.plist中添加了背景模式

在这里输入图像说明

即使我能够看到控制屏幕,我的应用程序在单击button时不会收到任何用户事件 在这里输入图像说明

我相信我错过了一些非常明显的东西。 任何指针都会有帮助。

编辑1:在iOS中接受的答案- UIEventTypeRemoteControl事件没有收到说, 你的应用程序必须是“正在播放”的应用程序。 我该怎么做呢?

我find了我的问题的答案。 我需要在AppDelegate中实现上面的代码来接收事件,而不是在ViewController中实现。