Audio Focus: essentie van het concept, modi en beheer in Android

Auteur: IT Sectr Gepubliceerd: 2026-05-23 Leestijd: 8 min

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 — het systeemmechanisme van Android voor coördinatie van audiostreaming tussen apps zonder geluidsoverlapping.
  • Focus aanvragen gebeurt via AudioManager.requestAudioFocus() met opgave van type en duur van het afspelen.
  • Het systeem meldt focuswijzigingen via AudioManager.OnAudioFocusChangeListener met codes AUDIOFOCUS_GAIN, LOSS en DUCK.
  • Auto Resume — bij AUDIOFOCUS_LOSS moet de app het afspelen pauzeren en hervatten bij AUDIOFOCUS_GAIN.
  • Android 12+ vereist verplicht gebruik van AudioFocusRequestCompat uit AndroidX voor het maken van een focusaanvraag.

Wat is Audio Focus?

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.

Audio Focus en media-afspelen

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.

Hoe werkt Audio Focus in Android

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.

Ketting van Audio Focus-gebeurtenissen

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.

Typen en modi van Audio Focus-aanvraag

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.

AanvraagtypeScenarioReactie eigenaar
AUDIOFOCUS_GAINStarten muziek, podcastAUDIOFOCUS_LOSS — speler moet stoppen
AUDIOFOCUS_GAIN_TRANSIENTOproep, spraakmeldingAUDIOFOCUS_LOSS_TRANSIENT — pauze
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKGPS-aanwijzing, kort signaalAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — dempen
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVESpraakzoekopdracht, opnameAUDIOFOCUS_LOSS — volledige stop

Kenmerken van AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

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.

Implementatie van Audio Focus in code

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.

Maken en uitvoeren van de Audio Focus-aanvraag

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()
}

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.

Callback voor focuswijzigingsverwerking

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()
        }
    }
}

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.

Audio Focus vrijgeven

kotlin
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.

Verwerking van audiofocusverlies

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.

Verwerking van oproepen en navigatie

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.

Typische gebruiksscenario's

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.

  • Muziek + oproep — de speler pauzeert (AUDIOFOCUS_LOSS_TRANSIENT). Na de oproep automatisch hervatten, als de gebruiker geen acties in de speler heeft uitgevoerd.
  • Muziek + navigatie — de speler wordt gedempt tijdens de spraakaanwijzing (DUCK). Het volume wordt hersteld na de zin.
  • Gebruiker startte een andere app — de speler ontvangt AUDIOFOCUS_LOSS en stopt. Hervatten alleen via de Play-knop.
  • Video + muziek op de achtergrond — de videospeler vraagt AUDIOFOCUS_GAIN. De muziekspeler ontvangt LOSS en stopt.
  • Spraakzoekopdracht (Google Assistant) — de app ontvangt AUDIOFOCUS_LOSS_TRANSIENT, pauzeert en hervat automatisch na het antwoord van de assistent.

Automatisch hervatten na focusverlies

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

Is Audio Focus verplicht voor alle audio-apps?

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.

Hoe controleer ik of Audio Focus correct werkt?

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.

Wat is AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK in de praktijk?

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.

Kan ik een Audio Focus-verliesaanvraag weigeren?

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.

Werkt Audio Focus op andere platforms dan Android?

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

  • Audio Focus — de systeemaudiobemiddelaar in Android die geluidsoverlapping van verschillende apps voorkomt.
  • Focus aanvragen gebeurt via AudioFocusRequestCompat met opgave van durationHint: GAIN, TRANSIENT of TRANSIENT_MAY_DUCK.
  • De callback OnAudioFocusChangeListener verwerkt vier gebeurtenissen: GAIN, LOSS, LOSS_TRANSIENT en LOSS_TRANSIENT_CAN_DUCK.
  • Bij AUDIOFOCUS_LOSS stopt de speler, bij TRANSIENT — pauzeert met automatisch hervatten, bij DUCK — wordt gedempt.
  • Het is belangrijk de vlag wasPlayingBeforeLoss te onthouden om niet te hervatten na expliciete pauze van de gebruiker.
  • Focus vrijgeven via abandonAudioFocusRequest is verplicht bij pauze en stoppen van de speler.
  • Op iOS is het equivalent van Audio Focus Audio Session (AVAudioSession) met eigen categorieën en modi.

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.

Bespreek het project

Lees ook