MediaSession — Schlüsselkonzepte, Integration und Funktionsweise in Android

Autor: IT Sectr Veröffentlicht: 2026-05-23 Lesezeit: 8 Min.

MediaSession ist eine Android-Framework-Komponente zur Verwaltung der Medienwiedergabe und Integration mit externen Geräten. Sie bietet eine einheitliche Schnittstelle für die Interaktion mit Bluetooth-Headsets, Kopfhörern, Android Auto und der Systemmedienzentrale. Laut Android Developers Guide, 2026 ersetzt MediaSession den veralteten RemoteControlClient und ist für Player obligatorisch, die mit dem System synchronisieren.

Das Wichtigste

  • MediaSession ist die zentrale Komponente zur Verwaltung von Medienströmen in Android, die Befehle von externen Quellen empfängt.
  • Sie unterstützt Bluetooth AVRCP, Headsets, Android Auto, Wearables und die Android-Medienzentrale.
  • Die Sitzung synchronisiert den Player-Status (Play/Pause/Next/Previous) und Metadaten (Titel, Interpret, Cover) mit dem System.
  • Erforderlich ist MediaSessionCompat aus AndroidX, das Abwärtskompatibilität bis API 14 bietet.
  • Das MediaSession.Callback-System verarbeitet eingehende Befehle und ändert den Status von MediaSession.

Was ist MediaSession?

MediaSession ist eine Systemkomponente in Android, die es einer App ermöglicht, ihre Medienaktivität zu deklarieren und Steuerbefehle von externen Quellen zu empfangen. Wenn der Benutzer die Play-Taste an einem Bluetooth-Headset drückt, übergibt das System dieses Ereignis an die aktive MediaSession, und die App antwortet über ihren Callback.

Vor Android 5.0 wurde RemoteControlClient für diesen Zweck verwendet, aber er bot nicht genügend Flexibilität und unterstützte keine modernen Szenarien wie Android Auto, Smartwatches und Smart Speaker. MediaSession wurde in API 21 eingeführt und zum De-facto-Standard für alle Android-Apps mit Audio- und Videowiedergabe.

Laut Android-Entwicklerdokumentation (2026) sollte eine App eine MediaSession für jede unabhängige Wiedergabequelle erstellen. Zu jedem Zeitpunkt kann nur eine Sitzung aktiv sein — jede neue Sitzung deaktiviert automatisch die vorherige.

MediaSession und MediaBrowserService

Die Kombination von MediaSession mit MediaBrowserService bietet einen vollständigen Medienverwaltungszyklus: Der Dienst stellt einen Inhaltsbaum (Playlists, Kataloge) bereit, und die Sitzung nimmt Navigations- und Wiedergabebefehle entgegen. Dies ist die von Google empfohlene Architektur für Musikplayer, Podcasts und Hörbücher.

MediaBrowserService läuft als Vordergrunddienst mit einer Benachrichtigung und stellt sicher, dass die App auch bei zerstörter Activity weiterarbeitet. Dies ist entscheidend für Audioplayer, die auch bei minimierter App weiterlaufen müssen.

Wie MediaSession funktioniert

Die Sitzung unterstützt zwei Arten der Interaktion: Sie empfängt Befehle von MediaController (der Client-Seite) und sendet den Status über PlaybackState. MediaController kann sich im selben Prozess oder in einer separaten App befinden — das System leitet Anfragen über SessionToken weiter.

Wenn der Benutzer den Android-Sprachassistenten aufruft und „Nächsten Titel abspielen“ sagt, findet das System die aktive MediaSession über die Verbindung zu MediaBrowserService und sendet den Befehl ACTION_SKIP_TO_NEXT. Der Callback der App empfängt den Aufruf onSkipToNext() und aktualisiert den PlaybackState.

Die Aktualisierung des PlaybackState über setPlaybackState() benachrichtigt sofort alle verbundenen MediaController-Instanzen. Die Systemmedienzentrale, das Bluetooth-Gerät und Android Auto erhalten das Update gleichzeitig — die Verzögerung beträgt unter normalen Bedingungen nicht mehr als 50 ms.

PlaybackState und seine Metadaten

PlaybackState enthält wichtige Status-Flags: isPlaying, Position, Geschwindigkeit, verfügbare Aktionen (Play, Pause, Seek, Stop). Ohne einen korrekt gefüllten PlaybackState weiß das System nicht, welche Befehle die App unterstützt, und sendet keine entsprechenden Ereignisse.

Metadaten (MediaMetadata) ergänzen den Status um Informationen zum aktuellen Titel — Titel, Interpret, Albumcover-URI. Android Auto und Smartwatches verwenden MediaMetadata zur Anzeige von Informationen auf dem Bildschirm. Laut Google I/O 2024 erhöht die korrekte Befüllung von MediaMetadata die Sichtbarkeit der App in Drittanbieter-Startern um 40%.

Schlüsselkomponenten von MediaSession

Die MediaSession-Architektur besteht aus vier miteinander verbundenen Komponenten, die jeweils eine eigene Aufgabe erfüllen. Der Entwickler muss alle vier für eine vollständige Systemintegration implementieren.

  • MediaSessionCompat — die Hauptklasse der Sitzung, erstellt mit einem App-Tag und akzeptiert einen PendingIntent für Medientasten.
  • MediaSession.Callback — der Befehlshandler. Implementiert onPlay, onPause, onSkipToNext, onSeekTo und andere Methoden.
  • PlaybackStateCompat — der aktuelle Player-Status. Enthält Flags, Position, Geschwindigkeit und die Liste der verfügbaren Aktionen.
  • MediaMetadataCompat — Metadaten der aktuellen Medien: Titel, Interpret, Album, Cover, Dauer.

Lebenszyklus von MediaSession

Die Sitzung wird in der onCreate-Methode eines Dienstes oder einer Activity durch Aufruf von MediaSessionCompat(context, tag) erstellt. Nach der Erstellung muss setFlags(FLAG_HANDLES_MEDIA_BUTTONS | FLAG_HANDLES_TRANSPORT_CONTROLS) aufgerufen werden. In onDestroy wird release() aufgerufen, um Systemressourcen freizugeben.

Fehlerhaftes Lebenszyklusmanagement ist einer der häufigsten Fehler. Wenn release() nicht aufgerufen wird, bleibt die Sitzung im System bestehen, und die nächste App könnte einen veralteten Status erhalten. Android 13+ zeigt eine Logcat-Warnung bei Sitzungslecks an.

Integration von MediaSession in die App

Die grundlegende Integration beginnt mit der Erstellung einer Sitzung und der Implementierung eines Callbacks. Es wird empfohlen, MediaSessionCompat aus der AndroidX Media-Bibliothek zu verwenden, die eine einheitliche API für alle Android-Versionen von API 14 bis 35 bietet.

Erstellung von MediaSession und Callback

kotlin
class MusicService : Service() {

    private lateinit var mediaSession: MediaSessionCompat
    private lateinit var stateBuilder: PlaybackStateCompat.Builder

    override fun onCreate() {
        super.onCreate()

        mediaSession = MediaSessionCompat(this, "MusicService")
        mediaSession.setFlags(
            MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
                or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
        )
        mediaSession.setCallback(MediaSessionCallback())
        updatePlaybackState(false)
    }

    private inner class MediaSessionCallback : MediaSessionCompat.Callback() {
        override fun onPlay() {
            updatePlaybackState(true)
        }

        override fun onPause() {
            updatePlaybackState(false)
        }
    }

    private fun updatePlaybackState(isPlaying: Boolean) {
        stateBuilder = PlaybackStateCompat.Builder()
            .setState(
                if (isPlaying) PlaybackStateCompat.STATE_PLAYING
                else PlaybackStateCompat.STATE_PAUSED,
                AudioTrackCompat.CURRENT_POSITION_NOT_SET,
                1.0f
            )
            .setActions(
                PlaybackStateCompat.ACTION_PLAY
                    or PlaybackStateCompat.ACTION_PAUSE
                    or PlaybackStateCompat.ACTION_SKIP_TO_NEXT
                    or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
            )
        mediaSession.setPlaybackState(stateBuilder.build())
    }

    override fun onDestroy() {
        mediaSession.release()
        super.onDestroy()
    }
}

In diesem Beispiel wird eine MediaSession mit dem Tag MusicService und Flags für die Verarbeitung von Medientasten erstellt. Der Callback implementiert onPlay und onPause und aktualisiert den PlaybackState. Die Methode setActions deklariert verfügbare Aktionen, die das System auf dem Sperrbildschirm und in der Medienzentrale anzeigt.

MediaMetadata festlegen

kotlin
private fun setMetadata(title: String, artist: String) {
    val metadata = MediaMetadataCompat.Builder()
        .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
        .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
        .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 300000L)
        .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, albumArtUrl)
        .build()
    mediaSession.setMetadata(metadata)
}

Metadaten sollten bei jedem Titelwechsel aktualisiert werden. Das System verwendet METADATA_KEY_TITLE und METADATA_KEY_ARTIST zur Anzeige von Informationen auf Bluetooth-Displays von Autos und Wearables. Wenn die Cover-URI nicht gesetzt ist, zeigt der Player einen grauen Platzhalter an.

Verarbeitung von Medienbefehlen von Bluetooth und Kopfhörern

Bluetooth-Headsets senden Befehle über das Profil AVRCP 1.6+. Android sendet diese Befehle als ACTION_MEDIA_BUTTON-Intents, die von MediaSession abgefangen werden, wenn das Flag FLAG_HANDLES_MEDIA_BUTTONS gesetzt ist.

Wenn der Benutzer die Play-Taste an Bluetooth-Kopfhörern drückt, erstellt das System ein KeyEvent mit dem Code KEYCODE_MEDIA_PLAY, das an die Methode onMediaButtonEvent des Callbacks gesendet wird. Wenn onPlay() im Callback implementiert ist, ruft das System es direkt auf. Ein einzelner Tastendruck am Headset sendet KEYCODE_MEDIA_PLAY_PAUSE — der Player sollte den Status umschalten.

Verarbeitung komplexer Szenarien mit mehreren Tasten

Moderne Bluetooth-Kopfhörer können bis zu 5 Tasten haben: Lautstärke +/-, Play/Pause, Next, Previous. Jede Taste erzeugt ihr eigenes KeyEvent, das vom Callback korrekt verarbeitet werden muss. Ein Doppeldruck auf Play/Pause wird bei vielen Headsets typischerweise als Sprung zum nächsten Titel (ACTION_SKIP_TO_NEXT) interpretiert.

Laut Android Compatibility Definition Document (2026) müssen alle Apps mit Medieninhalten KEYCODE_MEDIA_PLAY_PAUSE korrekt verarbeiten. Die Missachtung dieser Anforderung führt zu einer automatischen Herabstufung der App-Bewertung im Google Play für die Kategorie Musik & Audio.

Synchronisierung mit der Systemmedienzentrale

Ab Android 11 zeigt die Systemmedienzentrale (Media Control Panel) bis zu 5 aktuelle MediaSession-Instanzen in der Benachrichtigungsleiste an. Der Benutzer kann den Player steuern, ohne die App zu öffnen. Für die korrekte Anzeige müssen MediaBrowserService implementiert und PlaybackState korrekt befüllt werden.

Das Media Control Panel zeigt: Titel, Interpret, Cover (aus MediaMetadata), Steuertasten (aus den verfügbaren PlaybackState-Aktionen). Wenn die App PlaybackState während der aktiven Wiedergabe nicht mindestens einmal alle 10 Sekunden aktualisiert, blendet die Medienzentrale die Sitzung aus dem Panel aus.

Vordergrunddienst mit Benachrichtigung

kotlin
private fun startForegroundService() {
    val notification = NotificationCompat.Builder(this, "media_channel")
        .setSmallIcon(R.drawable.ic_play)
        .setContentTitle("Läuft jetzt")
        .setContentText(currentTrackTitle)
        .setPriority(NotificationCompat.PRIORITY_LOW)
        .setStyle(
            androidx.media.app.NotificationCompat.MediaStyle()
                .setMediaSession(mediaSession.sessionToken)
        )
        .build()
    startForeground(1001, notification)
}

Die MediaStyle-Benachrichtigung verbindet sich über den sessionToken mit der MediaSession und zeigt standardmäßige Medientasten an. Ohne MediaStyle erscheint die Benachrichtigung als normale Warnung ohne Steuertasten. Android 13+ erfordert die explizite Berechtigung POST_NOTIFICATIONS für die Anzeige.

Häufig gestellte Fragen

Kann eine App mehrere aktive MediaSession-Instanzen gleichzeitig haben?

Technisch ja, aber zu jedem Zeitpunkt wird nur eine Sitzung als aktiv betrachtet. Beim Erstellen einer neuen Sitzung ohne Aufruf von setActive(true) bleibt die vorherige aktiv. Es wird empfohlen, eine Sitzung pro App oder eine pro unabhängiger Audioquelle mit Umschaltung des aktiven Status zu haben.

Wie interagiert MediaSession mit Audio Focus?

MediaSession verwaltet Audio Focus nicht automatisch — dies ist ein separater Mechanismus. Beim Empfang eines onPlay-Befehls muss der Entwickler selbstständig AudioFocus über AudioManager anfordern und bei Fokusverlust die Wiedergabe über die Sitzung pausieren.

Warum funktionieren die Medientasten an Kopfhörern nicht mit meiner App?

Überprüfen Sie, ob die Flags FLAG_HANDLES_MEDIA_BUTTONS und FLAG_HANDLES_TRANSPORT_CONTROLS gesetzt sind. Stellen Sie auch sicher, dass die Sitzung aktiv ist (setActive(true)). Unter Android 12+ funktionieren Medientasten nur über MediaSession — der alte registerMediaButtonEventReceiver wird nicht unterstützt.

Ist MediaBrowserService für die Funktion von MediaSession erforderlich?

Für die grundlegende Tastenverarbeitung — nein. Für die Integration mit Android Auto, Wear OS und der Systemmedienzentrale ist jedoch MediaBrowserService erforderlich. Google empfiehlt die Implementierung von MediaBrowserService in allen Apps mit langer Audiowiedergabe.

Wie überprüfe ich, ob MediaSession korrekt konfiguriert ist?

Verwenden Sie den Befehl adb shell dumpsys media_session, um aktive Sitzungen, deren Callbacks und PlaybackState anzuzeigen. Dieses Dienstprogramm zeigt alle registrierten Sitzungen mit ihrem Tag, Aktivitätsstatus und letztem bekannten Zustand — ein praktisches Werkzeug zum Debuggen.

Zusammenfassung

  • MediaSession ist der Standardweg zur Verwaltung der Wiedergabe in Android und ersetzt RemoteControlClient ab API 21.
  • Die Sitzung empfängt Befehle von Bluetooth, Kopfhörern, Android Auto und der Systemmedienzentrale über das Callback-System.
  • PlaybackState und MediaMetadata sind zwei obligatorische Komponenten für die korrekte Synchronisierung mit der Systemoberfläche.
  • Die Integration erfolgt über MediaSessionCompat aus AndroidX Media und bietet Kompatibilität mit API 14+.
  • Für die Anzeige in der Systemmedienzentrale sind MediaBrowserService und ein Vordergrunddienst mit MediaStyle-Benachrichtigung erforderlich.
  • Die Verwaltung von Audio Focus ist eine separate Aufgabe, die nicht von MediaSession automatisiert wird. Der Entwickler verwaltet den Fokus eigenständig.
  • Zum Debuggen verwenden Sie adb shell dumpsys media_session, um aktive Sitzungen und deren Status anzuzeigen.

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.

Projekt besprechen

Lesen Sie auch