Переключение звука в динамике на наушник и наоборот в iphone, но микрофон отключен

#xamarin.forms #xamarin.ios

#xamarin.forms #xamarin.ios

Вопрос:

Мы используем сторонний аудио / видео SDK в нашем Xamarin.Формы.iOSproject. Теперь проблема в том, что по умолчанию звук поступает в режиме громкоговорителя, а не в наушник. Я нашел приведенный ниже код, и использование этого звука переключается в наушниках-динамиках и динамиках. но когда я включаю динамик, микрофон отключается, а когда я нахожусь в наушнике, тогда оба работают. итак, мой вопрос заключается в том, как включить микрофон в обоих случаях?

    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. пожалуйста, не публикуйте повторяющиеся вопросы

2. он не дублируется, указанный для Android, а этот для платформы iOS. Если вы считаете, что это дубликат, дайте мне знать, я объединю это с другим.

3. @JohnSmith Привет, вы решили эту проблему?

4. Да, я это исправил.

5. @JohnSmith Вы можете поделиться своим ответом здесь, это будет полезно для других 🙂

Ответ №1:

В состоянии 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);
}