2017-05-15 47 views
5

Po włączeniu ekranu z powodzeniem włączam moją aplikację, aby odtwarzać dźwięk i wideo w tle. Jednakże, dla lepszego komfortu użytkownika chcę pokazać odtwarzanie i wstrzymać kontrolę uruchomionych multimediów na zablokowanym ekranie. Po wykonaniu kilku blogów w internecie, dodawali następujący kod:Nie można odebrać remoteControlReceivedWithEvent - cel c - ios

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

Dodano trybów tła w Info.plist

enter image description here

chociaż jestem w stanie zobaczyć ekran kontroli, żadne zdarzenie użytkownik otrzymane przez moją aplikację po kliknięciu przycisków enter image description here.

Uważam, że brakuje mi czegoś oczywistego. Wszelkie wskazówki byłyby pomocne.

EDYCJA 1: Przyjęta odpowiedź w iOS - UIEventTypeRemoteControl events not received mówi, że Twoja aplikacja musi być aplikacją "Teraz odtwarzane". Jak to zrobić?

Odpowiedz

2

Znalazłem odpowiedź na moje pytanie. Muszę zaimplementować powyższy fragment kodu w AppDelegate, aby odbierać zdarzenia zamiast implementować w ViewController.