2016-06-02 4 views
1

Ich arbeite an einer App, die Audio im Hintergrund spielt, während andere Apps mit einem AVAudioPlayer verwendet werden. Wenn die Kamera geöffnet wird, wird die Musik stummgeschaltet, aber keine der Methoden im AppDelegate für den App-Lebenszyklus wird aufgerufen, sodass ich die Playlist-Position oder die Wiedergabezeit für den Song nicht speichern kann.Wie wird die Wiedergabe von Audio fortgesetzt, nachdem die Kamera ausgeschaltet wurde?

Zusätzlich, wenn die Kamera entlassen wird, möchte ich die App fortsetzen, Hintergrundmusik zu spielen, aber wieder habe ich keine Callback-Methode gefunden, damit ich diese Änderung beobachten kann.

Wissen Sie, wie Sie beobachten können, dass die Kamera aktiv wurde und dass die Kamera während des Betriebs der App im Hintergrundmodus ausgeschaltet wurde?

+0

Wie ist die Kamera geöffnet? – rmaddy

+0

Wie ich es gemacht habe, habe ich das Schiebefenster benutzt. – Aaronium112

+0

Dadurch wird Ihre App in den Hintergrund verschoben. Ich habe es gerade getestet und die entsprechende App-Delegate-Methode aufgerufen. – rmaddy

Antwort

1

Hier ist, wie ich es gelöst habe.

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(handleAudioSessionInterruption:) 
               name:AVAudioSessionInterruptionNotification 
               object:[AVAudioSession sharedInstance]]; 

Behandeln Sie die Unterbrechung.

-(void)handleAudioSessionInterruption:(NSNotification*)notification 
{ 
    //NSLog(@"%@",notification); 

    NSNumber *interruptionType = [[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey]; //1 Interuption Start, 0 Interuption Ends 
    NSNumber *interruptionOption = [[notification userInfo] objectForKey:AVAudioSessionInterruptionOptionKey]; 

    if ([interruptionType integerValue] == AVAudioSessionInterruptionTypeBegan) 
    { 
     NSLog(@"Player %d interupted",playerNumber); 
     // • Audio has stopped, already inactive 
     // • Change state of UI, etc., to reflect non-playing state 
     [self.playPauseButton setTitle:@">" forState:UIControlStateNormal]; 
     self.playingAudio = NO; 

     return; 
    } 

    if ([interruptionType integerValue] == AVAudioSessionInterruptionTypeEnded) 
    { 
     if ([interruptionOption integerValue] == AVAudioSessionInterruptionOptionShouldResume) 
     { 
      NSLog(@"Player %d Resume",playerNumber); 
      [self.playPauseButton setTitle:@"||" forState:UIControlStateNormal]; 
      self.playingAudio = YES; 

      NSError *error = nil; 
      AVAudioSession *aSession = [AVAudioSession sharedInstance]; 
      [aSession setMode:AVAudioSessionModeDefault error:&error]; //& means value at address 
      [aSession setCategory:AVAudioSessionCategoryPlayback error:&error]; 
      //[aSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]; 
      //[aSession setMode:AVAudioSessionModeSpokenAudio error:&error]; 
      [aSession setActive: YES error: &error]; 
      [self.audioPlayer play]; 
     } 
     // • Make session active 
     // • Update user interface 
     // • AVAudioSessionInterruptionOptionShouldResume option 
    } 
Verwandte Themen