2017-05-15 9 views
5

スクリーンがロックされた後、バックグラウンドでオーディオとビデオを再生できるようにすることに成功しました。しかし、ユーザーエクスペリエンスを向上させるためには、ロックされた画面上で実行中のメディアの再生と一時停止のコントロールを表示する必要があります。remoteControlReceivedWithEventを受信できません - 目的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; 
    } 
} 
} 

追加のバックグラウンドモードはInfo.plistの

enter image description here

に私がコントロール画面を見ることができていたとしても、何のユーザイベントがありません:オンラインのブログのカップルに従った後、次のコードを追加しましたボタンenter image description hereをクリックすると、私のアプリで受信しました。

私は非常に明白な何かを逃していると思います。任意のポインタが役立つだろう。

編集1:iOS - UIEventTypeRemoteControl events not receivedの回答では、が「今再生中」のアプリである必要があります。どうすればいいですか?

答えて

2

私の質問に対する答えが見つかりました。 ViewControllerで実装する代わりに、イベントを受け取るためにAppDelegateで上記のコードを実装する必要があります。

関連する問題