remoteControlReceivedWithEvent不在appDelegate中调用

我有问题来控制我的avplayer的iPhone控制。

如果我把这个function

- (void)remoteControlReceivedWithEvent:(UIEvent *)event 

在视图控制器负责播放被调用的function,但只有当我要在当前的视图控制器的背景。

如果我要从其他视图控制器的背景function从未调用。

这就是为什么我想把它放在应用程序的代表。

我尝试了Becomefirstresponse,并将该函数放在每个视图控制器中,但它确实有帮助。

我也打电话

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

在里面

 -(void)applicationWillResignActive:(UIApplication *)application 

谢谢

您可以将function上移到响应者链中,转到UIApplication子类。 这样,它将永远在那里赶上事件。

这种事件在通用的UI和控制器类中被忽略了,所以它到达了应用程序代理和应用程序本身驻留的应答链的底部。

如此处所述,UIApplication的代表不属于响应者链(我错了)。 UIApplication在那里,根UIWidow,链中的所有视图和对应的UIViewControllers。

我已经使用下面的代码到iPhone控制 –

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; 

用于获取注册收听遥控器。 一旦完成删除它 –

 [[UIApplication sharedApplication] endReceivingRemoteControlEvents]; [self resignFirstResponder]; 

使应用程序canBecomeFirstResponder

 - (BOOL)canBecomeFirstResponder { return YES; } 

使用委托方法来处理iPhone的控制,如播放和暂停,而按下主屏幕上的button

 - (void)remoteControlReceivedWithEvent:(UIEvent *)event { //if it is a remote control event handle it correctly if (event.type == UIEventTypeRemoteControl) { if (event.subtype == UIEventSubtypeRemoteControlPlay) { [audioPlayer play]; NSLog(@"play"); } else if (event.subtype == UIEventSubtypeRemoteControlPause) { [audioPlayer stop]; NSLog(@"pause"); } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) { NSLog(@"toggle"); } } } 

在我的情况下,我能够处理播放和暂停。请让我们知道是否有任何错误。

提示:必须从viewDidAppear中调用becomeFirstResponder ,而不是viewWillAppear

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self becomeFirstResponder]; }