在iPhone中切换扬声器到耳机扬声器中的音频,反之亦然,但麦克风已静音



我们在Xamarin.Forms.iOSproject中使用第三方音频/视频SDK。现在的问题是,默认情况下,音频处于扬声器模式,而不是耳罩模式。我在下面找到了代码,使用该音频正在打开耳机和扬声器。但是当我在扬声器上时,麦克风被静音,当我在耳机扬声器中时,两者都在工作。所以我的问题是如何在这两种情况下启用麦克风?

   bool blIsOnEarSpeaker=false;
    public void SetAudioSettingsForIOS()
    {
        var session=AVFoundation.AVAudioSession.SharedInstance();
       AVFoundation.AVAudioSessionCategory objCategory= AVFoundation.AVAudioSessionCategory.Playback;
        Foundation.NSError error = null;
        if (blIsOnEarSpeaker==false)
        {
            objCategory=AVFoundation.AVAudioSessionCategory.PlayAndRecord;
            blIsOnEarSpeaker=true;
            error = session.SetCategory(objCategory);
        }
        else
        {
            objCategory=AVFoundation.AVAudioSessionCategory.Playback;
            blIsOnEarSpeaker=false;
            error = session.SetCategory(
                                        objCategory
                                       ,AVFoundation.AVAudioSessionCategoryOptions.DefaultToSpeaker
                                       );
        }

        error = session.SetActive(true);
    }

在 else 条件下:

改变

**objCategory=AVFoundation.AVAudioSessionCategory.Playback;**

**objCategory=AVFoundation.AVAudioSessionCategory.PlayAndRecord;**

或者更好的方法是,在if/else条件之前使用此行:

bool blIsOnEarSpeaker=false;
public void SetAudioSettingsForIOS()
{
    var session=AVFoundation.AVAudioSession.SharedInstance();
   AVFoundation.AVAudioSessionCategory objCategory= AVFoundation.AVAudioSessionCategory.Playback;
    Foundation.NSError error = null;
    objCategory=AVFoundation.AVAudioSessionCategory.PlayAndRecord;
    if (blIsOnEarSpeaker==false)
    {
        blIsOnEarSpeaker=true;
        error = session.SetCategory(objCategory);
    }
    else
    {
        blIsOnEarSpeaker=false;
        error = session.SetCategory(
                                    objCategory
                                   ,AVFoundation.AVAudioSessionCategoryOptions.DefaultToSpeaker
                                   );
    }

    error = session.SetActive(true);
}

最新更新