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

时间:2019-04-16 09:07:41

标签: xamarin.forms xamarin.ios

我们在Xamarin.Forms.iOS项目中使用了第三方音频/视频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);
    }

1 个答案:

答案 0 :(得分:0)

在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);
}