remoteControlReceivedWithEvent未在appDelegate中调用

时间:2012-08-08 10:13:18

标签: iphone ios

我在使用我的avplayer控制iPhone控件时遇到问题。

如果我把功能

- (void)remoteControlReceivedWithEvent:(UIEvent *)event

在负责播放被调用函数的视图控制器中,但仅当我要在当前视图控制器中进行后台操作时。

如果我从其他视图控制器转到后台,则该函数从未调用过。

这就是我想把它放在app委托中的原因。

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

我也打电话给

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

中的

-(void)applicationWillResignActive:(UIApplication *)application

感谢

3 个答案:

答案 0 :(得分:23)

我已将以下代码用于iPhone控制 -

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

用于获取用于收听遥控器的注册。  完成后删除它 -

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

使应用 canBecomeFirstResponder -

- (BOOL)canBecomeFirstResponder {
    return YES;
}

使用委托方法处理iPhone控件,例如在主页按钮上点按播放和暂停

- (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");
        }
    }
}

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

答案 1 :(得分:12)

您可以将响应程序链中的函数移动到UIApplication子类。这样,它总会在那里捕捉事件。

这种事件在常见的UI和控制器类中被忽略,因此它会一直移动到响应者链的底部,您的应用程序委托和应用程序本身就在其中。

如前所述here,UIApplication的代表不是响应者链的一部分(我在这里错了)。 UIApplication就在那里,根UIWidow也是如此,链中的所有视图和相应的UIViewControllers都是。

答案 2 :(得分:2)

提示:必须在viewDidAppear内调用becomeFirstResponder,而不是viewWillAppear ...

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