Audio Focus é um mecanismo do Android que regula o uso simultâneo da saída de áudio por vários aplicativos. Ele impede a sobreposição de sons: quando um app inicia a reprodução, o sistema automaticamente abaixa ou pausa outro. De acordo com Android Developer Guide, 2026, o Audio Focus é obrigatório para todos os apps que reproduzem áudio — sem ele, o Google Play pode rejeitar a atualização.
Pontos Principais
Audio Focus é um sistema centralizado de arbitragem de áudio no Android. Quando um app solicita o foco, o sistema verifica se há um “proprietário” ativo do foco e envia a ele uma notificação de perda. O proprietário pode reduzir o volume (duck), pausar a reprodução ou ignorar — dependendo do tipo de foco.
Antes do Android 8.0, o foco era gerenciado via AudioManager.requestAudioFocus(callback, stream, durationHint). A partir do Android 8.0, foi introduzido o AudioFocusRequest, que adicionou a capacidade de especificar o tipo de solicitação e a restauração automática do foco. No Android 12, o mecanismo foi fortalecido — todos os players de mídia devem lidar corretamente com o foco para publicar no Google Play.
De acordo com o Google I/O 2024, cerca de 15% das reclamações de usuários em avaliações de apps de áudio estão relacionadas à sobreposição de sons. A implementação correta do Audio Focus resolve esse problema e melhora a experiência do usuário em 30% no tempo de audição.
É importante entender que o Audio Focus não controla a reprodução automaticamente. Ele apenas notifica o app sobre eventos de foco. O app decide por si mesmo: pausar o player, reduzir o volume ou continuar tocando. O sistema não força — esta decisão arquitetônica é deixada para o desenvolvedor.
A exceção são os apps de navegação (Google Maps, Yandex Maps). Eles podem solicitar o tipo de foco AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, onde o player existente tem seu volume reduzido enquanto as instruções de voz tocam por cima. Após a instrução, o player restaura automaticamente o volume.
O sistema mantém um único proprietário ativo do foco de áudio. Quando um novo app solicita o foco, o sistema determina a prioridade e envia um evento ao proprietário atual. Se o proprietário atual ignorar o evento e continuar tocando alto, o sistema não aplica penalidades — a responsabilidade recai inteiramente sobre o player.
A solicitação de foco inclui um parâmetro durationHint que informa ao sistema a duração estimada: AUDIOFOCUS_GAIN (reprodução longa — música, podcast), AUDIOFOCUS_GAIN_TRANSIENT (curta duração — som de notificação, navegação), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (curta duração com permissão para reduzir o volume do player existente).
Ao perder o foco, o app recebe um de três códigos: AUDIOFOCUS_LOSS (perda prolongada — outro app iniciou música), AUDIOFOCUS_LOSS_TRANSIENT (perda temporária — chamada, notificação), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (perda temporária com possibilidade de redução de volume). Cada código exige sua própria reação.
Um usuário ouve música no app A. Chega uma chamada — o app B (telefone) solicita AUDIOFOCUS_GAIN_TRANSIENT. O sistema envia AUDIOFOCUS_LOSS_TRANSIENT para o app A. O player pausa. Após a chamada, o app B libera o foco, o sistema notifica o app A via AUDIOFOCUS_GAIN — o player retoma a reprodução. Toda a cadeia leva menos de 50 ms.
Escolher o durationHint correto é a decisão chave ao implementar o Audio Focus. Uma escolha incorreta do tipo leva à sobreposição de sons, parada desnecessária do player ou irritação do usuário.
| Tipo de solicitação | Cenário | Reação do proprietário |
|---|---|---|
| AUDIOFOCUS_GAIN | Iniciar música, podcast | AUDIOFOCUS_LOSS — o player deve parar |
| AUDIOFOCUS_GAIN_TRANSIENT | Chamada, notificação de voz | AUDIOFOCUS_LOSS_TRANSIENT — pausa |
| AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK | Instrução GPS, sinal curto | AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — reduzir volume |
| AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE | Pesquisa por voz, gravação | AUDIOFOCUS_LOSS — parada completa |
Duck é uma redução temporária do volume do player principal para 20–30% enquanto um som secundário toca. O Android fornece uma API para duck manual via AudioManager.adjustSuggestedStreamVolume, mas a maioria dos players implementa a redução por meios próprios. De acordo com a Documentação do Android (2026), o tratamento de duck deve durar no máximo 3 segundos, após os quais o volume é restaurado.
Para implementar corretamente o Audio Focus, você precisa realizar três etapas sequencialmente: criar uma solicitação, solicitar o foco antes da reprodução e lidar com o evento em um callback. O uso de AudioFocusRequestCompat do AndroidX media garante compatibilidade com todas as versões do Android.
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()
}
A solicitação de foco deve ser feita antes de iniciar a reprodução cada vez que o usuário pressiona Play. Se o resultado for AUDIOFOCUS_REQUEST_GRANTED — comece a tocar. Se for DENIED — mostre uma mensagem ao usuário ou adie a reprodução até obter o foco.
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()
}
}
}
No callback, é importante distinguir entre AUDIOFOCUS_LOSS e AUDIOFOCUS_LOSS_TRANSIENT. No primeiro caso, o player NÃO deve retomar automaticamente — o usuário iniciou explicitamente outro áudio. No segundo, pode retomar automaticamente ao receber AUDIOFOCUS_GAIN. O flag wasPlayingBeforeLoss ajuda a lembrar se a reprodução precisa ser restaurada.
private fun abandonAudioFocus() {
AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}
Chamar abandonAudioFocusRequest informa ao sistema que o app não precisa mais do foco. É importante chamá-lo ao pausar e parar o player. Se o foco não for liberado, outro app solicitando AUDIOFOCUS_GAIN não receberá LOSS e os sons se sobreporão.
Lidar corretamente com a perda de foco é um requisito fundamental para passar pela revisão do Google Play. O tratamento incorreto leva a avaliações negativas: os usuários reclamam que a música continua tocando durante uma chamada ou sobre a navegação.
Ao receber AUDIOFOCUS_LOSS, o player deve parar e não retomar até que o usuário pressione Play explicitamente. Em AUDIOFOCUS_LOSS_TRANSIENT (chamada, notificação), o player pausa e retoma automaticamente quando o foco é restaurado. Em AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, o player reduz temporariamente o volume para 20–30% enquanto o áudio externo é reproduzido.
De acordo com o Guia do Desenvolvedor Android (2026), o duck deve ser implementado multiplicando o nível de volume atual do AudioTrack por um fator de 0.2–0.3. Não use AudioManager.setStreamVolume — isso altera o volume do sistema e afeta outros apps. O duck é realizado apenas no lado do próprio player.
Em uma chamada recebida, o sistema solicita automaticamente AUDIOFOCUS_GAIN_TRANSIENT através do app Telefone. O player recebe AUDIOFOCUS_LOSS_TRANSIENT e pausa. Após a chamada terminar ou se o usuário recusar a chamada, o foco retorna — o player retoma automaticamente a reprodução se for um player de música.
Para apps de navegação (Google Maps), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK é usado durante instruções de voz. O player tem seu volume reduzido por 2–3 segundos, depois o volume é restaurado. Se o usuário estiver ouvindo um podcast em vez de música, é melhor pausar do que reduzir o volume — cada segundo importa em podcasts.
Na prática, os desenvolvedores encontram vários cenários padrão onde o Audio Focus se comporta de maneira diferente. Vejamos os casos típicos e as reações corretas.
É importante implementar um flag que lembre se a música estava tocando antes da perda de foco. Se o usuário pressionou pausa por conta própria e depois chegou uma chamada — não retome. O flag é redefinido na pausa explícita do usuário e é definido ao iniciar a reprodução.
De acordo com a pesquisa de UX do Google (2024), a retomada automática após uma chamada aumenta a satisfação do usuário em 22%. Mas se o player retomar depois que o usuário já começou a assistir a um vídeo — isso causa irritação. O flag wasPlayingBeforeLoss evita retomadas falsas.
Perguntas Frequentes
Sim, a partir do Android 12, o Google Play recomenda a implementação do Audio Focus para todos os apps que reproduzem áudio. Os apps da categoria Música e Áudio devem implementá-lo para publicação. Ignorá-lo pode levar à rejeição da atualização.
Inicie seu player, depois abra outro app de áudio (por exemplo, YouTube Music). Seu player deve pausar. Em seguida, feche o YouTube Music — o player deve retomar automaticamente. Para um teste de duck, use o Google Maps com instruções de voz.
O sistema diz: “Outro app precisa reproduzir brevemente um som curto — reduza o volume do seu player.” Isso é ideal para instruções de voz e notificações curtas. O volume é restaurado após o áudio externo terminar sem intervenção manual.
Formalmente sim — o sistema não força. Mas na prática isso significa sobreposição de sons. O usuário ouvirá música e uma chamada simultaneamente, levando a uma experiência negativa. O Google recomenda sempre lidar com AUDIOFOCUS_LOSS parando o player.
No iOS, o papel equivalente é desempenhado pelo Audio Session, gerenciado através do AVAudioSession. Os mecanismos são semelhantes: categorias e opções definem o comportamento durante a sobreposição de sons. No entanto, a API e as regras diferem significativamente — cada framework é implementado de sua própria maneira.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também