音频遥控器不起作用

时间:2013-09-04 19:31:39

标签: ios events audio controls mpmovieplayercontroller

在我设法使用MPMoviePlayerController在后台播放音频并试图让它接收遥控器之后。但是当我点击播放/暂停按钮时,没有任何反应,音频继续播放。 然后我试图显示是否有日志输出但是没有输出。

这是我的代码:

   -(void)viewDidAppear:(BOOL)animated{
...
       [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [self becomeFirstResponder];
    }

    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
        [self resignFirstResponder];
    }

    - (void)remoteControlReceivedWithEvent:(UIEvent *)event {
        NSLog(@"remoteControlReceivedWithEvent: %@", event);
        if (event.type==UIEventTypeRemoteControl) {
            if (event.subtype==UIEventSubtypeRemoteControlPlay) {
                NSLog(@"Play");
            } else if (event.subtype==UIEventSubtypeRemoteControlPause) {
                NSLog(@"Pause");
            } else if (event.subtype==UIEventSubtypeRemoteControlTogglePlayPause) {
                NSLog(@"Play Pause");
            }
        }
    }

感谢您的努力。

1 个答案:

答案 0 :(得分:0)

看起来您的视图控制器不在响应链中 这可能是由于viewWillDisappear中的[self resignFirstResponder]和/或另一个ViewController在前面。

为了确保您收到这些事件,您可以实现一个UIApplication子类,它将始终能够接收事件。因此,哪个ViewController可见是无关紧要的。 UIApplication始终位于响应者链的末尾。

为UIApplication(MyUIApplication)创建一个子类并实现以下UIResponder方法:

- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
    ...
}

- (BOOL)canBecomeFirstResponder {
  return YES;
}

在main.m中使用以下命令启动应用程序(用您的类名替换MyUIApplication和AppDelegate):

@autoreleasepool {
      return UIApplicationMain(argc, argv, NSStringFromClass([MyUIApplication class]), NSStringFromClass([AppDelegate class]));
}