Audio Focus — een Android-mechanisme dat het gelijktijdig gebruik van de audio-uitgang door meerdere apps regelt. Het voorkomt overlapping van geluiden: wanneer een app begint met afspelen, dempt of pauzeert het systeem automatisch de andere. Volgens Android Developer Guide, 2026 is Audio Focus verplicht voor alle apps die audio afspelen — zonder kan Google Play de update weigeren.
Belangrijkste punten
Audio Focus — een gecentraliseerd audiobemiddelingssysteem in Android. Wanneer een app focus aanvraagt, controleert het systeem of er een actieve „eigenaar" van de focus is en stuurt hem een melding van verlies. De eigenaar kan het geluid dempen (duck), het afspelen pauzeren of negeren — afhankelijk van het focustype.
Vóór Android 8.0 werd focus beheerd via AudioManager.requestAudioFocus(callback, stream, durationHint). Vanaf Android 8.0 verscheen AudioFocusRequest, dat de mogelijkheid toevoegde om het aanvraagtype en automatisch focusherstel te specificeren. In Android 12 werd het mechanisme versterkt — alle mediaspelers moeten focus correct verwerken voor publicatie in Google Play.
Volgens Google I/O 2024 houdt ongeveer 15% van de gebruikersklachten in recensies van audio-apps verband met geluidsoverlapping. Correcte implementatie van Audio Focus lost dit probleem op en verbetert de gebruikerservaring met 30% qua luistertijd.
Het is belangrijk te begrijpen dat Audio Focus het afspelen niet automatisch beheert. Het meldt de app alleen over focusgebeurtenissen. De app beslist zelf: de speler pauzeren, het volume verlagen of doorgaan met afspelen. Het systeem dwingt niet — dit is een architectuurbeslissing die aan de ontwikkelaar wordt overgelaten.
Uitzondering zijn navigatie-apps (Google Maps, Yandex.Maps). Zij kunnen focus van het type AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK aanvragen, waarbij de bestaande speler wordt gedempt en stembegeleidingen eroverheen klinken. Na de begeleiding herstelt de speler automatisch het volume.
Het systeem onderhoudt één actieve eigenaar van de audiofocus. Bij een focusaanvraag door een nieuwe app bepaalt het systeem de prioriteit en stuurt een gebeurtenis naar de huidige eigenaar. Als de huidige eigenaar de gebeurtenis negeert en luid blijft afspelen, past het systeem geen sancties toe — de verantwoordelijkheid ligt volledig bij de speler.
De focusaanvraag bevat de parameter durationHint, die het systeem informeert over de verwachte duur: AUDIOFOCUS_GAIN (langdurig afspelen — muziek, podcast), AUDIOFOCUS_GAIN_TRANSIENT (kortdurend — meldingsgeluid, navigatie), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (kortdurend met toestemming om de bestaande speler te dempen).
Bij focusverlies ontvangt de app een van drie codes: AUDIOFOCUS_LOSS (langdurig verlies — een andere app startte muziek), AUDIOFOCUS_LOSS_TRANSIENT (tijdelijk verlies — oproep, melding), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (tijdelijk verlies met dempingsmogelijkheid). Elke code vereist een eigen reactie.
De gebruiker luistert naar muziek in app A. Er komt een oproep binnen — app B (telefoon) vraagt AUDIOFOCUS_GAIN_TRANSIENT aan. Het systeem stuurt AUDIOFOCUS_LOSS_TRANSIENT naar app A. De speler pauzeert. Na de oproep geeft app B de focus vrij, het systeem meldt app A via AUDIOFOCUS_GAIN — de speler hervat het afspelen. De hele keten duurt minder dan 50 ms.
De juiste keuze van durationHint — de belangrijkste beslissing bij implementatie van Audio Focus. Een fout in de typekeuze leidt tot geluidsoverlapping, onnodige spelerstops of gebruikersirritatie.
| Aanvraagtype | Scenario | Reactie eigenaar |
|---|---|---|
| AUDIOFOCUS_GAIN | Starten muziek, podcast | AUDIOFOCUS_LOSS — speler moet stoppen |
| AUDIOFOCUS_GAIN_TRANSIENT | Oproep, spraakmelding | AUDIOFOCUS_LOSS_TRANSIENT — pauze |
| AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK | GPS-aanwijzing, kort signaal | AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — dempen |
| AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE | Spraakzoekopdracht, opname | AUDIOFOCUS_LOSS — volledige stop |
Duck — tijdelijke verlaging van het volume van de hoofdspeler naar 20–30% tijdens het afspelen van een secundair geluid. Android biedt een API voor handmatig ducken via AudioManager.adjustSuggestedStreamVolume, maar de meeste spelers implementeren demping met eigen middelen. Volgens Android Documentation (2026) mag ducken niet langer dan 3 seconden duren, waarna het volume wordt hersteld.
Voor correcte implementatie van Audio Focus moeten drie stappen worden gevolgd: aanvraag maken, focus aanvragen vóór afspelen en de gebeurtenis in de callback verwerken. Gebruik van AudioFocusRequestCompat uit AndroidX media garandeert compatibiliteit met alle Android-versies.
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()
}
De focusaanvraag moet vóór het begin van het afspelen worden uitgevoerd elke keer dat de gebruiker op Play drukt. Als het resultaat AUDIOFOCUS_REQUEST_GRANTED is — begin met afspelen. Bij DENIED — toon de gebruiker een bericht of stel het afspelen uit tot focus is verkregen.
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()
}
}
}
In de callback is het belangrijk onderscheid te maken tussen AUDIOFOCUS_LOSS en AUDIOFOCUS_LOSS_TRANSIENT. In het eerste geval MAG de speler niet automatisch hervatten — de gebruiker heeft expliciet andere audio gestart. In het tweede geval — kan automatisch worden hervat bij ontvangst van AUDIOFOCUS_GAIN. De vlag wasPlayingBeforeLoss helpt onthouden of het afspelen moet worden hersteld.
private fun abandonAudioFocus() {
AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}
De aanroep abandonAudioFocusRequest meldt het systeem dat de app geen focus meer nodig heeft. Het is belangrijk dit bij pauze en stoppen van de speler aan te roepen. Als de focus niet wordt vrijgegeven, krijgt een andere app die AUDIOFOCUS_GAIN aanvraagt geen LOSS en zullen geluiden overlappen.
Correcte verwerking van focusverlies — een belangrijke vereiste voor het doorstaan van de Google Play-review. Onjuiste verwerking leidt tot negatieve recensies: gebruikers klagen dat muziek blijft spelen tijdens een oproep of over navigatie heen.
Bij ontvangst van AUDIOFOCUS_LOSS moet de speler stoppen en niet hervatten tot expliciet indrukken van Play. Bij AUDIOFOCUS_LOSS_TRANSIENT (oproep, melding) pauzeert de speler en hervat automatisch bij focusherstel. Bij AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK verlaagt de speler tijdelijk het volume naar 20–30% tijdens extern audio.
Volgens Android Developer Guide (2026) moet ducken worden geïmplementeerd door het huidige volumeniveau van AudioTrack te vermenigvuldigen met een factor 0,2–0,3. Gebruik geen AudioManager.setStreamVolume — dit wijzigt het systeemvolume en beïnvloedt andere apps. Ducken wordt alleen aan de kant van de eigen speler uitgevoerd.
Bij een inkomende oproep vraagt het systeem automatisch AUDIOFOCUS_GAIN_TRANSIENT aan via de Telefoon-app. De speler ontvangt AUDIOFOCUS_LOSS_TRANSIENT en pauzeert. Na de oproep of als de gebruiker de oproep heeft geweigerd, keert de focus terug — de speler hervat automatisch het afspelen, als het een muziekspeler is.
Voor navigatie-apps (Google Maps) wordt AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK gebruikt bij spraakaanwijzingen. De speler wordt 2–3 seconden gedempt, daarna wordt het volume hersteld. Als de gebruiker naar een podcast luistert in plaats van muziek, is pauzeren beter dan ducken — bij podcasts telt elke seconde.
In de praktijk komen ontwikkelaars verschillende standaardscenario's tegen waarin Audio Focus zich anders gedraagt. Laten we de typische gevallen en correcte reacties erop bekijken.
Het is belangrijk een vlag te implementeren die onthoudt of de muziek vóór het verlies van focus speelde. Als de gebruiker zelf op pauze heeft gedrukt en er kwam een oproep — niet hervatten. De vlag wordt gereset bij expliciete pauze van de gebruiker en ingesteld bij start van het afspelen.
Volgens UX-onderzoek van Google (2024) verhoogt automatisch hervatten na een oproep de gebruikerstevredenheid met 22%. Maar als de speler hervat nadat de gebruiker al een video is gaan kijken — veroorzaakt dit irritatie. De vlag wasPlayingBeforeLoss beschermt tegen valse hervattingen.
Veelgestelde vragen
Ja, vanaf Android 12 beveelt Google Play implementatie van Audio Focus aan voor alle apps die audio afspelen. Apps in de categorie Music & Audio zijn verplicht het te implementeren voor publicatie. Negeren kan leiden tot weigering van de update.
Start de speler, open dan een andere app met audio (bijv. YouTube Music). Uw speler moet pauzeren. Sluit vervolgens YouTube Music — de speler moet automatisch hervatten. Gebruik voor de duck-test Google Maps met spraakaanwijzingen.
Het systeem meldt: „Een andere app moet kort een geluid afspelen — dempen uw speler". Dit is optimaal voor spraakaanwijzingen en korte meldingen. Het volume wordt hersteld na extern audio zonder handmatige tussenkomst.
Formeel ja — het systeem dwingt niet. Maar in de praktijk betekent dit geluidsoverlapping. De gebruiker hoort tegelijk muziek en een oproep, wat leidt tot een negatieve ervaring. Google adviseert altijd AUDIOFOCUS_LOSS te verwerken door de speler te stoppen.
Op iOS vervult Audio Session, beheerd via AVAudioSession, een vergelijkbare rol. De mechanismen zijn vergelijkbaar: categorieën en opties bepalen het gedrag bij geluidsoverlapping. De API's en regels verschillen echter fundamenteel — elk framework is anders geïmplementeerd.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook