Cómo capturar audio en Android Q
lunes, 5 de agosto de 2019
Publicado por Don Turner, desarrollador de Android Media
En Android Q, hay una nueva API que permite a las aplicaciones capturar el audio de otras apps. Se llama AudioPlaybackCapture y puede aplicarse a algunos casos de uso importantes que facilitan el intercambio de contenido y la accesibilidad.
Entre algunos ejemplos, se incluyen los siguientes:
En raras ocasiones, cuando un desarrollador desea rechazar la captura de audio por parte de apps del sistema, también puede hacerlo de forma similar a como se hace con las apps de terceros. Ten en cuenta que las apps de terceros tampoco podrán capturar audio.
Si quieres impedir que se capture una parte o la totalidad del audio, actualiza tu app siguiendo las instrucciones mencionadas anteriormente.
Para obtener más información, consulta la documentación de la API de Audio Playback Capture.

En Android Q, hay una nueva API que permite a las aplicaciones capturar el audio de otras apps. Se llama AudioPlaybackCapture y puede aplicarse a algunos casos de uso importantes que facilitan el intercambio de contenido y la accesibilidad.
Entre algunos ejemplos, se incluyen los siguientes:
- Subtítulos en vivo: Permite que el contenido de audio de la app que se está reproduciendo se subtitule o traduzca en tiempo real. De hecho, la función Transcripción instantánea, que se presentó en la edición de I/O de este año, es cliente de esta API. Los subtítulos en vivo permiten a los usuarios interactuar con contenido de audio incluso cuando es imposible o poco conveniente hacerlo, como en un lugar público sin auriculares.
- Grabación y transmisión de juegos: Es posible grabar sonidos provenientes de juegos y transmitirlos a públicos en vivo, lo que permite aumentar el alcance social del contenido lúdico.
¿Qué ve el usuario?
Para capturar el audio de otras apps, el usuario debe otorgarle el permiso de grabación de audio a la app que realiza la captura.
Diálogo de permisos AUDIO_RECORD
Además, antes de iniciar una sesión de captura, la app en cuestión debe llamar a MediaProjectionManager.createScreenCaptureIntent()
. Esto le mostrará al usuario el siguiente cuadro de diálogo: 
Diálogo de intención de captura de pantalla
El usuario debe presionar "Iniciar ahora" para que comience una sesión de captura. Esto permitirá capturar tanto audio como video.

Ícono de transmisión que muestra el color rojo en la barra de estado
Durante una sesión de captura, el ícono de transmisión aparece en color rojo en la barra de estado.
¿Se puede capturar el audio de mi app?
El hecho de que el audio de tu app pueda o no capturarse de forma predeterminada depende de tu API de destino. A continuación, se incluye una tabla que resume el comportamiento predeterminado:API de destino | ¿Las aplicaciones de terceros pueden capturar el audio de tu app de forma predeterminada? | ¿Las aplicaciones y componentes del sistema pueden capturar el audio de tu app de forma predeterminada? |
28 e inferior | No, la app necesita habilitarse explícitamente | Sí, para audio con tipo de uso MEDIA, GAME y UNKNOWN |
29 | Sí, para audio con tipo de uso MEDIA, GAME y UNKNOWN | Sí, para audio con tipo de uso MEDIA, GAME y UNKNOWN |
Cómo inhabilitar la captura por parte de apps de terceros
Es posible que haya situaciones en las que una app quiera impedir que otras capturen su audio. Esto podría deberse a que el audio contiene:- Información sensible, como grabaciones de voz privadas
- Material con derechos de autor, como música o audio de películas y programas de TV con derechos de autor
Cómo inhabilitar la captura de todo el audio por parte de apps de terceros
Para no permitir que apps de terceros capturen todo el audio, realiza una de las siguientes acciones:Agrega lo siguiente a tu archivo AndroidManifest.xml
|
<application
...
android:allowAudioPlaybackCapture="false"/>
|
Inhabilita la captura programática ejecutando el siguiente código antes de reproducir el audio | AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
|
Cómo inhabilitar la captura de reproductores específicos por parte de apps de terceros
Para rechazar la captura de un reproductor individual, establece una política de captura cuando se cree el reproductor realizando la siguiente llamada:AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)Este enfoque puede resultarte útil si tu app reproduce contenido con diferentes licencias (por ejemplo, contenido con derechos de autor o sin esos derechos).
Cómo inhabilitar la captura por parte de apps y componentes del sistema
De forma predeterminada, las apps y los componentes del sistema pueden capturar el audio de una aplicación si su uso está destinado a MEDIA, GAME o UNKNOWN, ya que estos se aplican a importantes casos de uso de accesibilidad, como subtítulos en vivo.En raras ocasiones, cuando un desarrollador desea rechazar la captura de audio por parte de apps del sistema, también puede hacerlo de forma similar a como se hace con las apps de terceros. Ten en cuenta que las apps de terceros tampoco podrán capturar audio.
Cómo inhabilitar la captura de todo el audio
Esto solo se puede hacer de manera programática ejecutando el siguiente código antes de que se reproduzca cualquier audio:AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
Cómo inhabilitar la captura de reproductores específicos
Para rechazar la captura de un reproductor individual, establece una política de captura cuando se cree el reproductor:AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
¿Y ahora qué?
Si tu app está destinada a API de nivel 28 o inferior, y quieres habilitar la captura de audio, agregaandroid:allowAudioPlaybackCapture="true"
al archivo manifest.xml
de tu app.
Si quieres impedir que se capture una parte o la totalidad del audio, actualiza tu app siguiendo las instrucciones mencionadas anteriormente.
Para obtener más información, consulta la documentación de la API de Audio Playback Capture.