Решить проблему записи телефонных разговоров с линии (голоса обоих собеседников) на устройствах Sony с версии Android 6 и выше

Issue #1 resolved
Виктор Дегтярев repo owner created an issue

На устройствах Sony до Android 6 запись телефонных разговоров производилась с источником записи «MediaRecorder.AudioSource.VOICE_CALL» после обновления на Android 6 запись не может производиться с линии. В логах пишет, что нужно разрешение «android.permission.CAPTURE_AUDIO_OUTPUT», но оно не может быть получено для сторонних приложений.

Сообщение из логов при попытке сделать запись с линии:

[ 05-10 15:33:46.729   375: 4179 E/ ] Request requires android.permission.CAPTURE_AUDIO_OUTPUT

Эту проблему можно как то обойти т.к. несколько приложений в Google Play это сделали без использования Root прав.

Из логов я выяснил, что эти приложения сначала начинают запись с источника записи "MediaRecorder.AudioSource.Mic" (c микрофона) затем как то переключают источник записи на "MediaRecorder.AudioSource.VOICE_CALL" (на линию):

Сообщение в логах (установка источника записи на Mic):

D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=1;routing=-2147483644

Сообщение в логах (установка источника записи на VOICE_CALL):

D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=4;routing=-2147483584;format=1

Я предполагаю что они это делают нативным кодом т.к. стандартными методами мне это сделать не удалось. Я попытался установить параметры через AudioMаnager:

AudioManager aManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
aManager.setParameters("kvpairs=input_source=4;routing=-2147483584;format=1");

но в логах вижу, что вызывается функция adev_set_parameters а не in_set_parameters:

05-12 11:41:02.462 375-17526/? D/audio_hw_primary: adev_set_parameters: enter: kvpairs=input_source=4;routing=-2147483584;format=1

В интернете нашел исходники этого файла: https://android.googlesource.com/platform/hardware/qcom/audio/+/7c57a3a8ab8d526c074bcc373e8cba2fa06b4f23/hal/audio_hw.c

У меня есть предположения как решить этот вопрос но я в этом не уверен: можно добавить audio_hw.c в приложение и использовать его через NDK (вызвать функцию in_set_parameters).

Comments (12)

  1. Александр Стукалов

    Добрый день, столкнулся с подобной проблемой и не могу найти решение. Если можно, скажите свое решение.

  2. Виктор Дегтярев reporter

    Здравствуйте, Александр! Можем с вами пообщаться! Мой скайп: viktor_degtyarev

  3. Log in to comment