无法接收remoteControlReceivedWithEvent -目标c - ios

2w3rbyxf  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(158)

我成功地使我的应用程序能够在屏幕锁定后在后台播放音频和视频。然而,为了更好的用户体验,我想在锁定屏幕上显示正在运行的媒体的播放和暂停控件。在关注了几个在线博客之后,添加了以下代码:

@interface MyControllerClass () <UIGestureRecognizerDelegate, UIApplicationDelegate>

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

    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset]; 
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    NSError *activationError = nil;
    BOOL success = [[AVAudioSession sharedInstance] setActive: YES error: &activationError];
}

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

- (BOOL) canBecomeFirstResponder {
return YES;
}

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
NSLog(@"received event %@",receivedEvent);
if (receivedEvent.type == UIEventTypeRemoteControl) {
    switch (receivedEvent.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause: {
            if ([self isVideoPlaying]) {
                [self.avPlayer pause];
            } else {
                [self.avPlayer play];
            }
            break;
        }
        case UIEventSubtypeRemoteControlPlay: {
            [self.avPlayer play];
            break;
        }
        case UIEventSubtypeRemoteControlPause: {
            [self.avPlayer pause];
            break;
        }
        default:
            break;
    }
}
}

在info.plist中增加了背景模式

即使我能够看到控制屏幕,点击按钮

时,我的应用程序也不会收到任何用户事件。
我想我错过了一些非常明显的东西。任何提示将是有帮助的。
编辑1:iOS - UIEventTypeRemoteControl events not received中接受的答案是**您的应用必须是“正在播放”应用。**我该如何操作?

jogvjijk

jogvjijk1#

我找到了问题的答案。我需要在AppDelegate中实现我的问题中的代码来接收事件,而不是在ViewController中实现。

相关问题