在我设法使用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");
}
}
}
感谢您的努力。
答案 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]));
}