4

我有MPMoviePlayerController,應該在後臺播放視頻音頻,並應該由多任務播放/暫停控件控制。iOS MPMoviePlayerController在後臺播放音頻

更新的.plist文件,Required background modes並調用後,以下:

- (void)startBackgroundStreaming 
{ 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [self becomeFirstResponder]; 

    NSError *activationError = nil; 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&activationError]; 
    [audioSession setActive:YES error:&activationError]; 

}

的應用程序圖標顯示在多任務播放/暫停吧,但這些按鈕沒反應。

謝謝!

回答

8

拼圖的缺失部分是處理您收到的遙控器事件。您可以通過在您的應用程序委託中實施-(void)remoteControlReceivedWithEvent:(UIEvent *)event方法來執行此操作。在其最簡單的形式,它會是什麼樣子:

-(void)remoteControlReceivedWithEvent:(UIEvent *)event{ 
    if (event.type == UIEventTypeRemoteControl){ 
     switch (event.subtype) { 
      case UIEventSubtypeRemoteControlTogglePlayPause: 
       // Toggle play pause 
       break; 
      default: 
       break; 
     } 
    } 
} 

但是這種方法被調用的應用程序委託,但你總是可以發佈通知,將事件作爲對象,以便擁有電影播放器​​視圖控制器可以得到事件,如下所示:

-(void)remoteControlReceivedWithEvent:(UIEvent *)event{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"RemoteControlEventReceived" object:event]; 
} 

然後在您分配給通知的偵聽器方法中抓取事件對象。

-(void)remoteControlEventNotification:(NSNotification *)note{ 
    UIEvent *event = note.object; 
    if (event.type == UIEventTypeRemoteControl){ 
     switch (event.subtype) { 
      case UIEventSubtypeRemoteControlTogglePlayPause: 
       if (_moviePlayerController.playbackState == MPMoviePlaybackStatePlaying){ 
        [_moviePlayerController pause]; 
       } else { 
        [_moviePlayerController play]; 
       } 
       break; 
       // You get the idea. 
      default: 
       break; 
     } 
    } 
} 
+1

可以從View Controller調用 - (void)remoteControlReceivedWithEvent:(UIEvent *)事件,而不是AppDelegate – khunshan 2014-08-06 11:43:24