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]; }