Wechseln der Audioausgabe zwischen Receiver und Lautsprecher in iOS7 und höher?

Ich habe einen Audioplayer, der die Option hat, den Audioausgang von Lautsprecher auf Empfänger / Hörer umzuschalten (unabhängig davon, ob ein Headset angeschlossen ist), wenn der Näherungssensor 1 benachrichtigt. Das Folgende ist mein Code dafür.

- (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");

    }
 }

Dies basierte auf der AntwortToggle-Taste leitet Audio an Lautsprecher und Empfänger weiter und Linkbeschreibung hier eingeben. Mir ist aufgefallen, dass dies nur den Audio-zu-Lautsprecher zwingt, aber nicht sicherstellt, dass die Route nur zum Empfänger führt. Außerdem erhalte ich beim Wechseln zum Sprecher die folgende Fehlermeldung:

AVAudioSession Fehler overrideOutputAudioPort: Fehlerdomäne = NSOSStatusErrorDomain Code = -50 "Der Vorgang konnte nicht abgeschlossen werden. (OSStatus-Fehler -50.)"

Antworten auf die Frage(1)

Ihre Antwort auf die Frage