Как включить динамик Android во время звонка из кода?

Этот вопрос уже дважды задавали и отвечали на этом сайте, но этот код, похоже, вообще не работает на современных телефонах. Я работаю над Android 4.2 и Android 4.3, и ни один из них не работает.

Я проигрываю MP3 через медиаплеер во время звонка, и он работает нормально, но и песня, и звонок идут через голосовой динамик. Если я нажму «Динамик», они оба продолжат играть через громкоговоритель. Мне нужен этот эффект, но без необходимости нажимать его самому

    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setMode(AudioManager.MODE_IN_CALL);
    audioManager.setSpeakerphoneOn(true);

     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

Это было предложено как решение обоих других вопросов о SO, но оно просто не работает. Так и должно быть, код в порядке, но он просто никак не влияет на звук.

Мысли?


person Viktor Zafirovski    schedule 19.11.2015    source источник
comment
Вы проверили эту цитату на сайте разработчика. Вы можете воспроизводить аудиоданные только на стандартном устройстве вывода. В настоящее время это динамик мобильного устройства или Bluetooth-гарнитура. Вы не можете воспроизводить звуковые файлы в аудио разговора во время разговора. ---- developer.android.com/guide/topics/media/mediaplayer. html   -  person Vishnu Prabhu    schedule 19.11.2015
comment
Можете ли вы воспроизвести звуковой файл через мобильный динамик или наушники, если вы разговариваете по телефону?   -  person Vishnu Prabhu    schedule 19.11.2015
comment
Да, я уже говорил об этом выше, он работает абсолютно нормально. К сожалению, через час после того, как я опубликовал этот вопрос, я нашел решение. Через некоторое время я создал отдельный поток (правда), который многократно запускает приведенный выше код. Таким образом, динамик включен, и музыка играет вместе со звонком.   -  person Viktor Zafirovski    schedule 19.11.2015


Ответы (3)


Я решил это. Я создал поток, который постоянно выполняет приведенные выше три строки кода в режиме «While (true)». Работает отлично.

person Viktor Zafirovski    schedule 19.11.2015
comment
Подожди, серьезно? - person Bassinator; 27.11.2018

используйте этот код:

    AudioManager audioManager = (AudioManager) yourActivity.getSystemService(Context.AUDIO_SERVICE);
                    audioManager.setMode(AudioManager.MODE_IN_CALL);
                    audioManager.setSpeakerphoneOn(true);
person Maor Amsalem    schedule 22.07.2019

Это сработало для меня, в вашем вызове InCallService setAudioRoute следующим образом:

setAudioRoute(ROUTE_SPEAKER);
person aurhe    schedule 21.11.2020