una samsung salientes que para oculto mejor llamadas llamada grabar grabador entrantes den cuenta como app aplicaciones aplicacion android audio phone-call

samsung - grabar llamadas android oculto



¿Por qué no es posible reproducir un archivo de audio en una llamada de voz en Android? (5)

Al implementar AudioManager.OnAudioFocusChangeListener puede obtener el estado del audiomanager. por lo tanto, si se está reproduciendo música en segundo plano, puede obtener los estados de AudioManager (reproducir y pausar está completamente en manos del desarrollador) de manera similar ...

Algunos de los reproductores de música nativos en dispositivos Android que manejan esto restringen la música cuando la llamada está en TelephonyManager.EXTRA_STATE_OFFHOOK. Por lo tanto, este escenario también está completamente en manos del desarrollador (ya sea para manejarlo o no) si él no los maneja, ambos jugarán en paralelo y

Esta pregunta puede parecer una repetición de las siguientes preguntas:
Cómo reproducir un archivo de audio en una llamada de voz en Android
Audio de fondo para una llamada en curso: ¿posible?

Las respuestas de estas preguntas sugieren que no es posible reproducir un audio pregrabado en una llamada de voz en Android. Quiero saber por qué no es posible? ¿Cuál es la limitación (hardware / software)? ¿Es realmente una limitación o hecho a propósito? ¿Podemos alterar el código fuente de Android para hacerlo posible?


Creo que esta es una limitación , impuesta por razones de seguridad y restringida a nivel del sistema operativo.

Analicemos la amenaza a la seguridad, en primer lugar. Si pudo reproducir archivos de audio personalizados para el destinatario de la llamada, se abre todo un mundo de contras : podría engañar a la asistencia al cliente, podría pretender ser otra persona, podría dar confirmaciones de compra no autorizadas, etc. Por este motivo, ni Android ni iOS permiten esta funcionalidad.

En Android, no podrá hacerlo de forma programática, simplemente porque las API actuales no le permitirán hacerlo . También se indica en la documentación oficial, como se señala here . Si profundiza en el código fuente, probablemente pueda habilitar esta función accediendo a la salida del micrófono durante una llamada telefónica, pero eso requeriría ejecutar su versión personalizada de Android. Un buen punto de partida sería la fuente de AudioTrack , disponible aquí .

EDITAR : un buen ejemplo de un mod de audio implica habilitar el auricular Nexus 5 como un segundo altavoz (requiere root). Se pueden encontrar here .


Después de una investigación exhaustiva, lo que he llegado a saber es que hay más de una limitación / obstáculo para hacerlo posible. Estas limitaciones / obstáculos se encuentran en tres niveles diferentes.

La primera limitación es a nivel de API, porque no hay una API de alto nivel para reproducir archivos de sonido en el audio de la conversación durante una llamada como se menciona en la documentación oficial de Android .

La segunda limitación es en Radio Interface Layer (RIL). RIL pasa el control completo de la llamada a Radio Daemon (rild) de la biblioteca de Linux, que luego pasa el control al proveedor RIL. Eso significa que no podemos manipular la llamada de voz en el código fuente de Android.

Incluso si podemos eliminar estas dos limitaciones, es posible que no podamos reproducir archivos de audio en una llamada de voz en curso. Porque hay una tercera limitación . Cada proveedor tiene su propia biblioteca de RIL que se comunica con Radio Daemon (rild). Esto requiere que el proveedor RIL sea de código abierto, lo que no es realmente. Los proveedores de hardware no suelen hacer disponible el código de sus controladores de dispositivo.

La discusión detallada sobre este tema está presente en este enlace .


Este es un software relacionado debido a la priorización de enrutamiento de audio en Android. Eche un vistazo al CallManager donde puede profundizar en el método setAudioMode() . Después de configurar el modo de audio en MODE_IN_COMMUNICATION , se llama al siguiente código

audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

Desde este punto, el servicio de telefonía tiene la mayor prioridad y no permitirá que ningún otro audio se reproduzca en paralelo.


Nota: puede reproducir los datos de audio solo en el dispositivo de salida estándar. Actualmente, ese es el altavoz del dispositivo móvil o un auricular Bluetooth. No puede reproducir archivos de sonido en el audio de la conversación durante una llamada.

Consulte el enlace oficial http://developer.android.com/guide/topics/media/mediaplayer.html