2014-10-01 12 views
5

Mam odtwarzacz audio, który ma opcję przełączania wyjścia audio z głośnika na odbiornik/słuchawkę (niezależnie od tego, czy zestaw słuchawkowy jest podłączony), gdy czujnik zbliżeniowy powiadomi 1. Poniżej znajduje się mój kod.Przełączanie wyjścia audio między odbiornikiem i głośnikiem w systemie iOS7 i nowszych wersjach?

- (void) switchAudioOutput:(NSString*)output{ 
    AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
    BOOL success; 
    NSError* error; 

    if([output isEqualToString:keAudioOutputReciever]){ 
     //Force current audio out through reciever 
     //set the audioSession override 
     success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone 
              error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error); 

     //activate the audio session 
     success = [audioSession setActive:YES error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error activating: %@",error); 
     else 
      NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 

    }else if([output isEqualToString:keAudioOutputSpeaker]){ 
     //set the audioSession override 
     success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker 
                error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error); 

     //activate the audio session 
     success = [audioSession setActive:YES error:&error]; 
     if (!success) 
      NSLog(@"AVAudioSession error activating: %@",error); 
     else 
      NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideSpeaker"); 

    } 
} 

ta została oparta na odpowiedź Toggle Button route audio to speaker and receiver i enter link description here. Zauważyłem, że to tylko zmusza audio do głośnika sam, ale nie zapewnia, że ​​trasa przechodzi do samego odbiornika. Ponadto podczas przechodzenia do głośnika pojawia się następujący błąd:

AVAudioSession error overrideOutputAudioPort:Error Domain=NSOSStatusErrorDomain Code=-50 "The operation couldn’t be completed. (OSStatus error -50.)"

+1

Ja też czuło dokładnie ten sam błąd. Czy ktoś zdołał rozwiązać ten problem? –

Odpowiedz

7

zorientowali się odpowiedź poprzez unikanie przesłonięcia odbiornika

- (void) setAudioSession:(NSString*)audioOutput{ 

     NSError* error; 
     if([audioOutput isEqualToString:audioOutputSpeaker.lowercaseString]){ 

      //set the audioSession override 
      if(![self setCategory:AVAudioSessionCategoryPlayAndRecord 
           withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth 
            error:&error]) 
       NSLog(@"AVAudioSession error AVAudioSessionCategoryPlayAndRecord:%@",error); 

      //activate the audio session 
      if (![self setActive:YES error:&error]) 
       NSLog(@"AVAudioSession error activating: %@",error); 
      else 
       NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 
     }else if ([audioOutput isEqualToString:audioOutputReciever.lowercaseString]){ 
      //Force current audio out through reciever 
      //set the audioSession override 
      if(![self setCategory:AVAudioSessionCategoryPlayAndRecord 
           withOptions:AVAudioSessionCategoryOptionAllowBluetooth 
            error:&error]) 
       NSLog(@"AVAudioSession error AVAudioSessionCategoryPlayAndRecord:%@",error); 

      if (![self overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]) 
       NSLog(@"AVAudioSession error overrideOutputAudioPort to Reciever:%@",error); 

      //activate the audio session 
      if (![self setActive:YES error:&error]) 
       NSLog(@"AVAudioSession error activating: %@",error); 
      else 
       NSLog(@"AVAudioSession active with override: AVAudioSessionPortOverrideNone"); 
     } 
    } 
Powiązane problemy