Audio Focus ist ein Android-Mechanismus, der die gleichzeitige Nutzung des Audioausgangs durch mehrere Anwendungen regelt. Er verhindert die Überlagerung von Geräuschen: Wenn eine App die Wiedergabe startet, senkt oder pausiert das System automatisch eine andere. Laut Android Developer Guide, 2026 ist Audio Focus für alle Apps, die Audio abspielen, verbindlich — ohne ihn kann Google Play das Update ablehnen.
Wichtige Punkte
Audio Focus ist ein zentralisiertes Audio-Schlichtungssystem in Android. Wenn eine App den Fokus anfordert, überprüft das System, ob es einen aktiven Fokus-„Besitzer“ gibt, und sendet ihm eine Verlustbenachrichtigung. Der Besitzer kann je nach Fokustyp die Lautstärke senken (duck), die Wiedergabe pausieren oder ignorieren.
Vor Android 8.0 wurde der Fokus über AudioManager.requestAudioFocus(callback, stream, durationHint) verwaltet. Ab Android 8.0 wurde AudioFocusRequest eingeführt, das die Möglichkeit bot, den Anforderungstyp und die automatische Fokuswiederherstellung anzugeben. In Android 12 wurde der Mechanismus verstärkt — alle Mediaplayer müssen den Fokus korrekt behandeln, um bei Google Play veröffentlicht zu werden.
Laut Google I/O 2024 beziehen sich etwa 15% der Nutzerbeschwerden in Bewertungen von Audio-Apps auf Geräuschüberlagerungen. Die korrekte Implementierung von Audio Focus löst dieses Problem und verbessert die Nutzererfahrung um 30% bei der Hörzeit.
Es ist wichtig zu verstehen, dass Audio Focus die Wiedergabe nicht automatisch steuert. Er benachrichtigt die App nur über Fokusereignisse. Die App entscheidet selbst: den Player pausieren, die Lautstärke senken oder weiterspielen. Das System zwingt nicht — diese architektonische Entscheidung bleibt dem Entwickler überlassen.
Die Ausnahme sind Navigations-Apps (Google Maps, Yandex Maps). Sie können den Fokustyp AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK anfordern, bei dem die Lautstärke des vorhandenen Players gesenkt wird, während Sprachansagen darüber abgespielt werden. Nach der Ansage stellt der Player die Lautstärke automatisch wieder her.
Das System unterhält einen einzigen aktiven Besitzer des Audiofokus. Wenn eine neue App den Fokus anfordert, bestimmt das System die Priorität und sendet ein Ereignis an den aktuellen Besitzer. Ignoriert der aktuelle Besitzer das Ereignis und spielt laut weiter, verhängt das System keine Strafen — die Verantwortung liegt vollständig beim Player.
Die Fokusanforderung enthält einen Parameter durationHint, der dem System die geschätzte Dauer mitteilt: AUDIOFOCUS_GAIN (lange Wiedergabe — Musik, Podcast), AUDIOFOCUS_GAIN_TRANSIENT (kurzfristig — Benachrichtigungston, Navigation), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (kurzfristig mit Erlaubnis, den vorhandenen Player zu dämpfen).
Bei Fokusverlust erhält die App einen von drei Codes: AUDIOFOCUS_LOSS (langfristiger Verlust — eine andere App hat Musik gestartet), AUDIOFOCUS_LOSS_TRANSIENT (vorübergehender Verlust — Anruf, Benachrichtigung), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (vorübergehender Verlust mit Dämpfungsmöglichkeit). Jeder Code erfordert seine eigene Reaktion.
Ein Nutzer hört Musik in App A. Ein Anruf kommt herein — App B (Telefon) fordert AUDIOFOCUS_GAIN_TRANSIENT an. Das System sendet AUDIOFOCUS_LOSS_TRANSIENT an App A. Der Player pausiert. Nach dem Anruf gibt App B den Fokus frei, das System benachrichtigt App A über AUDIOFOCUS_GAIN — der Player setzt die Wiedergabe fort. Die gesamte Kette dauert weniger als 50 ms.
Die Wahl des richtigen durationHint ist die entscheidende Entscheidung bei der Implementierung von Audio Focus. Eine falsche Typwahl führt entweder zu Geräuschüberlagerung, unnötigem Player-Stopp oder Nutzerverärgerung.
| Anforderungstyp | Szenario | Reaktion des Besitzers |
|---|---|---|
| AUDIOFOCUS_GAIN | Starten von Musik, Podcast | AUDIOFOCUS_LOSS — Player sollte stoppen |
| AUDIOFOCUS_GAIN_TRANSIENT | Anruf, Sprachbenachrichtigung | AUDIOFOCUS_LOSS_TRANSIENT — Pause |
| AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK | GPS-Hinweis, kurzes Signal | AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — dämpfen |
| AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE | Sprachsuche, Aufnahme | AUDIOFOCUS_LOSS — vollständiger Stopp |
Duck ist eine vorübergehende Lautstärkereduzierung des Hauptplayers auf 20–30%, während ein sekundärer Ton abgespielt wird. Android bietet eine API für manuelles Ducken über AudioManager.adjustSuggestedStreamVolume, aber die meisten Player implementieren das Ducken mit eigenen Mitteln. Laut Android-Dokumentation (2026) sollte die Duck-Behandlung nicht länger als 3 Sekunden dauern, danach wird die Lautstärke wiederhergestellt.
Um Audio Focus korrekt zu implementieren, müssen Sie drei Schritte nacheinander ausführen: eine Anforderung erstellen, den Fokus vor der Wiedergabe anfordern und das Ereignis in einem Callback behandeln. Die Verwendung von AudioFocusRequestCompat aus AndroidX media gewährleistet Kompatibilität mit allen Android-Versionen.
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()
}
Die Fokusanforderung muss jedes Mal vor dem Start der Wiedergabe erfolgen, wenn der Nutzer Play drückt. Wenn das Ergebnis AUDIOFOCUS_REQUEST_GRANTED ist — beginnen Sie mit der Wiedergabe. Wenn DENIED — zeigen Sie dem Nutzer eine Nachricht oder verschieben Sie die Wiedergabe, bis der Fokus erlangt wird.
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()
}
}
}
Im Callback ist es wichtig, zwischen AUDIOFOCUS_LOSS und AUDIOFOCUS_LOSS_TRANSIENT zu unterscheiden. Im ersten Fall sollte der Player NICHT automatisch fortsetzen — der Nutzer hat explizit ein anderes Audio gestartet. Im zweiten kann er bei Erhalt von AUDIOFOCUS_GAIN automatisch fortsetzen. Das Flag wasPlayingBeforeLoss hilft zu merken, ob die Wiedergabe wiederhergestellt werden muss.
private fun abandonAudioFocus() {
AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}
Der Aufruf von abandonAudioFocusRequest teilt dem System mit, dass die App den Fokus nicht mehr benötigt. Dies ist wichtig bei Pause und Stopp des Players. Wenn der Fokus nicht freigegeben wird, erhält eine andere App, die AUDIOFOCUS_GAIN anfordert, kein LOSS und die Geräusche überlagern sich.
Die korrekte Behandlung des Fokusverlusts ist eine Schlüsselanforderung für die Google Play-Überprüfung. Eine falsche Behandlung führt zu negativen Bewertungen: Nutzer beschweren sich, dass die Musik während eines Anrufs oder über der Navigation weiterspielt.
Bei Erhalt von AUDIOFOCUS_LOSS sollte der Player stoppen und erst fortsetzen, wenn der Nutzer explizit Play drückt. Bei AUDIOFOCUS_LOSS_TRANSIENT (Anruf, Benachrichtigung) pausiert der Player und setzt automatisch fort, wenn der Fokus wiederhergestellt ist. Bei AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK reduziert der Player vorübergehend die Lautstärke auf 20–30%, während externes Audio abgespielt wird.
Laut Android Developer Guide (2026) sollte Duck durch Multiplikation des aktuellen AudioTrack-Lautstärkepegels mit einem Faktor von 0,2–0,3 implementiert werden. Verwenden Sie nicht AudioManager.setStreamVolume — dies ändert die Systemlautstärke und beeinflusst andere Apps. Ducken wird nur auf der eigenen Playerseite durchgeführt.
Bei einem eingehenden Anruf fordert das System automatisch AUDIOFOCUS_GAIN_TRANSIENT über die Telefon-App an. Der Player erhält AUDIOFOCUS_LOSS_TRANSIENT und pausiert. Nach dem Anruf oder wenn der Nutzer den Anruf ablehnt, kehrt der Fokus zurück — der Player setzt die Wiedergabe automatisch fort, wenn es ein Musikplayer ist.
Für Navigations-Apps (Google Maps) wird AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK während Sprachansagen verwendet. Der Player wird für 2–3 Sekunden gedämpft, dann wird die Lautstärke wiederhergestellt. Wenn der Nutzer einen Podcast statt Musik hört, ist Pause besser als Ducken — jede Sekunde zählt bei Podcasts.
In der Praxis stoßen Entwickler auf mehrere Standardszenarien, in denen sich Audio Focus unterschiedlich verhält. Betrachten wir die typischen Fälle und die richtigen Reaktionen.
Es ist wichtig, ein Flag zu implementieren, das merkt, ob Musik vor dem Fokusverlust abgespielt wurde. Wenn der Nutzer selbst pausiert hat und dann ein Anruf kam — nicht fortsetzen. Das Flag wird bei expliziter Pause des Nutzers zurückgesetzt und beim Start der Wiedergabe gesetzt.
Laut Google UX-Forschung (2024) erhöht die automatische Fortsetzung nach einem Anruf die Nutzerzufriedenheit um 22%. Aber wenn der Player fortgesetzt wird, nachdem der Nutzer bereits ein Video angesehen hat — verursacht dies Ärger. Das Flag wasPlayingBeforeLoss verhindert falsche Fortsetzungen.
Häufig gestellte Fragen
Ja, ab Android 12 empfiehlt Google Play die Implementierung von Audio Focus für alle Apps, die Audio abspielen. Apps der Kategorie Musik & Audio müssen es zur Veröffentlichung implementieren. Ignorieren kann zur Ablehnung des Updates führen.
Starten Sie Ihren Player, öffnen Sie dann eine andere Audio-App (z.B. YouTube Music). Ihr Player sollte pausieren. Schließen Sie dann YouTube Music — der Player sollte automatisch fortsetzen. Für einen Duck-Test verwenden Sie Google Maps mit Sprachansagen.
Das System sagt: „Eine andere App muss kurz einen kurzen Ton abspielen — dämpfen Sie Ihren Player.“ Dies ist optimal für Sprachansagen und kurze Benachrichtigungen. Die Lautstärke wird nach dem Ende des externen Audios ohne manuelles Eingreifen wiederhergestellt.
Formell ja — das System zwingt nicht. Aber in der Praxis bedeutet dies Geräuschüberlagerung. Der Nutzer hört gleichzeitig Musik und einen Anruf, was zu einer negativen Erfahrung führt. Google empfiehlt, AUDIOFOCUS_LOSS immer durch Stoppen des Players zu behandeln.
Auf iOS übernimmt Audio Session die entsprechende Rolle, verwaltet über AVAudioSession. Die Mechanismen sind ähnlich: Kategorien und Optionen definieren das Verhalten bei Geräuschüberlagerung. Allerdings unterscheiden sich API und Regeln erheblich — jedes Framework ist auf seine eigene Weise implementiert.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch