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:
  • 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.
Es posible que, en algunas situaciones, los desarrolladores quieran inhabilitar la captura de audio de su app. Este artículo explica cómo funciona este servicio para los usuarios y cómo pueden impedir los desarrolladores que se capture el audio de su app.

¿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
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
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
Í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
Es posible establecer la política de captura de audio de una app para todo el audio o para cada reproductor de audio individual.

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, agrega android: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.