Audio Focus: concepto, modos y gestión en Android

Autor: IT Sectr Publicado: 2026-05-23 Tiempo de lectura: 8 min

Audio Focus es un mecanismo de Android que regula el uso simultáneo de la salida de audio por varias aplicaciones. Evita la superposición de sonidos: cuando una app comienza la reproducción, el sistema automáticamente baja o pausa otra. Según Android Developer Guide, 2026, Audio Focus es obligatorio para todas las apps que reproducen audio — sin él, Google Play puede rechazar la actualización.

Puntos Clave

  • Audio Focus es un mecanismo del sistema Android para coordinar la reproducción de audio entre apps sin superposición de sonidos.
  • La solicitud de enfoque se realiza mediante AudioManager.requestAudioFocus() especificando el tipo y la duración de la reproducción.
  • El sistema notifica cambios de enfoque a través de AudioManager.OnAudioFocusChangeListener con los códigos AUDIOFOCUS_GAIN, LOSS y DUCK.
  • Auto Resume — al recibir AUDIOFOCUS_LOSS la app debe pausar la reproducción y reanudarla al recibir AUDIOFOCUS_GAIN.
  • Android 12+ requiere el uso de AudioFocusRequestCompat de AndroidX para crear una solicitud de enfoque.

¿Qué es Audio Focus?

Audio Focus es un sistema centralizado de arbitraje de audio en Android. Cuando una app solicita el enfoque, el sistema verifica si hay un “propietario” activo del enfoque y le envía una notificación de pérdida. El propietario puede bajar el volumen (duck), pausar la reproducción o ignorarlo — según el tipo de enfoque.

Antes de Android 8.0, el enfoque se gestionaba mediante AudioManager.requestAudioFocus(callback, stream, durationHint). A partir de Android 8.0, se introdujo AudioFocusRequest, que añadió la posibilidad de especificar el tipo de solicitud y la restauración automática del enfoque. En Android 12, el mecanismo se fortaleció — todos los reproductores multimedia deben manejar correctamente el enfoque para publicarse en Google Play.

Según Google I/O 2024, alrededor del 15% de las quejas de usuarios en reseñas de apps de audio están relacionadas con la superposición de sonidos. La implementación correcta de Audio Focus resuelve este problema y mejora la experiencia del usuario en un 30% en tiempo de escucha.

Audio Focus y reproducción multimedia

Es importante entender que Audio Focus no controla la reproducción automáticamente. Solo notifica a la app sobre eventos de enfoque. La app decide si pausar el reproductor, bajar el volumen o seguir reproduciendo. El sistema no obliga — esta decisión arquitectónica queda a criterio del desarrollador.

La excepción son las apps de navegación (Google Maps, Yandex Maps). Pueden solicitar el tipo de enfoque AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, donde el reproductor existente baja su volumen mientras las indicaciones de voz suenan encima. Después de la indicación, el reproductor restaura automáticamente el volumen.

Cómo funciona Audio Focus en Android

El sistema mantiene un único propietario activo del enfoque de audio. Cuando una nueva app solicita el enfoque, el sistema determina la prioridad y envía un evento al propietario actual. Si el propietario actual ignora el evento y sigue reproduciendo en voz alta, el sistema no aplica sanciones — la responsabilidad recae completamente en el reproductor.

La solicitud de enfoque incluye un parámetro durationHint que indica al sistema la duración estimada: AUDIOFOCUS_GAIN (reproducción larga — música, pódcast), AUDIOFOCUS_GAIN_TRANSIENT (corta duración — sonido de notificación, navegación), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (corta duración con permiso para bajar el volumen del reproductor existente).

Al perder el enfoque, la app recibe uno de tres códigos: AUDIOFOCUS_LOSS (pérdida prolongada — otra app inició música), AUDIOFOCUS_LOSS_TRANSIENT (pérdida temporal — llamada, notificación), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (pérdida temporal con posibilidad de bajar el volumen). Cada código requiere su propia reacción.

Cadena de eventos de Audio Focus

Un usuario escucha música en la app A. Llega una llamada — la app B (teléfono) solicita AUDIOFOCUS_GAIN_TRANSIENT. El sistema envía AUDIOFOCUS_LOSS_TRANSIENT a la app A. El reproductor se pausa. Después de la llamada, la app B libera el enfoque, el sistema notifica a la app A mediante AUDIOFOCUS_GAIN — el reproductor reanuda la reproducción. Toda la cadena toma menos de 50 ms.

Tipos y modos de solicitud de Audio Focus

Elegir el durationHint correcto es la decisión clave al implementar Audio Focus. Una elección incorrecta del tipo lleva a superposición de sonidos, detención innecesaria del reproductor o irritación del usuario.

Tipo de solicitudEscenarioReacción del propietario
AUDIOFOCUS_GAINIniciar música, pódcastAUDIOFOCUS_LOSS — el reproductor debe detenerse
AUDIOFOCUS_GAIN_TRANSIENTLlamada, notificación de vozAUDIOFOCUS_LOSS_TRANSIENT — pausa
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKIndicación GPS, señal cortaAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — bajar volumen
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEBúsqueda por voz, grabaciónAUDIOFOCUS_LOSS — detención completa

Particularidades de AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

Duck es una reducción temporal del volumen del reproductor principal al 20–30% mientras suena un sonido secundario. Android proporciona una API para duck manual mediante AudioManager.adjustSuggestedStreamVolume, pero la mayoría de los reproductores implementan la reducción con sus propios medios. Según la Documentación de Android (2026), el manejo de duck debe durar no más de 3 segundos, después de los cuales se restaura el volumen.

Implementación de Audio Focus en código

Para implementar correctamente Audio Focus, debes realizar tres pasos secuencialmente: crear una solicitud, solicitar el enfoque antes de la reproducción y manejar el evento en un callback. El uso de AudioFocusRequestCompat de AndroidX media garantiza la compatibilidad con todas las versiones de Android.

Creación y ejecución de una solicitud de Audio Focus

kotlin
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

val focusRequest = AudioFocusRequestCompat.Builder()
    .setFocusGain(AudioManagerCompat.AUDIOFOCUS_GAIN)
    .setOnAudioFocusChangeListener(focusChangeListener)
    .build()

val result = AudioManagerCompat.requestAudioFocus(audioManager, focusRequest)

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    startPlayback()
}

La solicitud de enfoque debe realizarse antes de iniciar la reproducción cada vez que el usuario presiona Play. Si el resultado es AUDIOFOCUS_REQUEST_GRANTED — comienza a reproducir. Si es DENIED — muestra un mensaje al usuario o aplaza la reproducción hasta obtener el enfoque.

Callback de cambio de enfoque

kotlin
private val focusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
    when (focusChange) {
        AudioManager.AUDIOFOCUS_GAIN -> {
            restoreVolume()
            if (wasPlayingBeforeLoss) resumePlayback()
        }
        AudioManager.AUDIOFOCUS_LOSS -> {
            pausePlayback()
            wasPlayingBeforeLoss = false
        }
        AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
            pausePlayback()
            wasPlayingBeforeLoss = true
        }
        AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
            duckVolume()
        }
    }
}

En el callback, es importante distinguir entre AUDIOFOCUS_LOSS y AUDIOFOCUS_LOSS_TRANSIENT. En el primer caso, el reproductor NO debe reanudarse automáticamente — el usuario inició explícitamente otro audio. En el segundo, puede reanudarse automáticamente al recibir AUDIOFOCUS_GAIN. El indicador wasPlayingBeforeLoss ayuda a recordar si es necesario restaurar la reproducción.

Liberación de Audio Focus

kotlin
private fun abandonAudioFocus() {
    AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}

Llamar a abandonAudioFocusRequest informa al sistema que la app ya no necesita el enfoque. Es importante llamarlo al pausar y detener el reproductor. Si no se libera el enfoque, otra app que solicite AUDIOFOCUS_GAIN no recibirá LOSS y los sonidos se superpondrán.

Manejo de la pérdida de audio focus

El manejo correcto de la pérdida de enfoque es un requisito clave para pasar la revisión de Google Play. Un manejo incorrecto lleva a reseñas negativas: los usuarios se quejan de que la música sigue sonando durante una llamada o sobre la navegación.

Al recibir AUDIOFOCUS_LOSS, el reproductor debe detenerse y no reanudarse hasta que el usuario presione Play explícitamente. En AUDIOFOCUS_LOSS_TRANSIENT (llamada, notificación), el reproductor se pausa y se reanuda automáticamente cuando se restaura el enfoque. En AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, el reproductor reduce temporalmente el volumen al 20–30% mientras se reproduce audio externo.

Según la Guía para Desarrolladores de Android (2026), el duck debe implementarse multiplicando el nivel de volumen actual de AudioTrack por un factor de 0.2–0.3. No uses AudioManager.setStreamVolume — esto cambia el volumen del sistema y afecta a otras apps. El duck se realiza solo en el lado del reproductor.

Manejo de llamadas y navegación

En una llamada entrante, el sistema solicita automáticamente AUDIOFOCUS_GAIN_TRANSIENT a través de la app Teléfono. El reproductor recibe AUDIOFOCUS_LOSS_TRANSIENT y se pausa. Después de la llamada o si el usuario la rechaza, el enfoque regresa — el reproductor reanuda automáticamente la reproducción si es un reproductor de música.

Para apps de navegación (Google Maps), se usa AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK durante las indicaciones de voz. El reproductor baja su volumen durante 2–3 segundos, luego se restaura. Si el usuario está escuchando un pódcast en lugar de música, es mejor pausar que bajar el volumen — cada segundo importa en los pódcasts.

Escenarios típicos de uso

En la práctica, los desarrolladores se enfrentan a varios escenarios estándar donde Audio Focus se comporta de manera diferente. Veamos los casos típicos y las reacciones correctas.

  • Música + llamada — el reproductor se pausa (AUDIOFOCUS_LOSS_TRANSIENT). Después de la llamada, se reanuda automáticamente si el usuario no interactuó con el reproductor.
  • Música + navegación — el reproductor baja su volumen durante la indicación de voz (DUCK). El volumen se restaura después de la frase.
  • El usuario inició otra app — el reproductor recibe AUDIOFOCUS_LOSS y se detiene. Reanudación solo con el botón Play.
  • Video + música en segundo plano — el reproductor de video solicita AUDIOFOCUS_GAIN. El reproductor de música recibe LOSS y se detiene.
  • Búsqueda por voz (Google Assistant) — la app recibe AUDIOFOCUS_LOSS_TRANSIENT, se pausa y se reanuda automáticamente después de la respuesta del asistente.

Reanudación automática después de la pérdida de enfoque

Es importante implementar un indicador que recuerde si la música se estaba reproduciendo antes de la pérdida de enfoque. Si el usuario presionó pausa por sí mismo y luego llegó una llamada — no reanudar. El indicador se restablece en la pausa explícita del usuario y se establece al iniciar la reproducción.

Según la investigación de UX de Google (2024), la reanudación automática después de una llamada aumenta la satisfacción del usuario en un 22%. Pero si el reproductor se reanuda después de que el usuario ya comenzó a ver un video — esto causa irritación. El indicador wasPlayingBeforeLoss evita reanudaciones falsas.

Preguntas Frecuentes

¿Es obligatorio Audio Focus para todas las apps con audio?

Sí, a partir de Android 12, Google Play recomienda la implementación de Audio Focus para todas las apps que reproducen audio. Las apps de la categoría Música y Audio deben implementarlo para su publicación. Ignorarlo puede llevar al rechazo de la actualización.

¿Cómo verificar que Audio Focus funciona correctamente?

Inicia tu reproductor, luego abre otra app de audio (por ejemplo, YouTube Music). Tu reproductor debería pausarse. Luego cierra YouTube Music — el reproductor debería reanudarse automáticamente. Para una prueba de duck, usa Google Maps con indicaciones de voz.

¿Qué es AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK en la práctica?

El sistema dice: “Otra app necesita reproducir brevemente un sonido corto — baja el volumen de tu reproductor”. Esto es óptimo para indicaciones de voz y notificaciones cortas. El volumen se restaura después de que termina el audio externo sin intervención manual.

¿Puedo rechazar una solicitud de pérdida de Audio Focus?

Formalmente sí — el sistema no obliga. Pero en la práctica esto significa superposición de sonidos. El usuario escuchará música y una llamada simultáneamente, lo que lleva a una experiencia negativa. Google recomienda manejar siempre AUDIOFOCUS_LOSS deteniendo el reproductor.

¿Funciona Audio Focus en otras plataformas además de Android?

En iOS, el rol equivalente lo desempeña Audio Session, gestionado a través de AVAudioSession. Los mecanismos son similares: las categorías y opciones definen el comportamiento durante la superposición de sonidos. Sin embargo, la API y las reglas difieren significativamente — cada framework está implementado de manera diferente.

Resumen

  • Audio Focus es el árbitro de audio del sistema en Android, que evita la superposición de sonidos entre diferentes apps.
  • La solicitud de enfoque se realiza mediante AudioFocusRequestCompat especificando durationHint: GAIN, TRANSIENT o TRANSIENT_MAY_DUCK.
  • El callback OnAudioFocusChangeListener maneja cuatro eventos: GAIN, LOSS, LOSS_TRANSIENT y LOSS_TRANSIENT_CAN_DUCK.
  • En AUDIOFOCUS_LOSS el reproductor se detiene; en TRANSIENT — se pausa con reanudación automática; en DUCK — baja el volumen.
  • Es importante rastrear el indicador wasPlayingBeforeLoss para evitar reanudar después de una pausa explícita del usuario.
  • La liberación del enfoque mediante abandonAudioFocusRequest es obligatoria al pausar y detener el reproductor.
  • En iOS, el equivalente de Audio Focus es Audio Session (AVAudioSession) con sus propias categorías y modos.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también