In diesen Leitfäden werden die MediaCompat APIs erörtert, die nicht mehr aktualisiert werden. Wir empfehlen dringend, stattdessen die
Jetpack Media3-Bibliothek zu verwenden.
Videoplayer-Aktivität erstellen
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Wenn die Aktivität die Lebenszyklus-Callback-Methode onCreate()
empfängt, sollte sie die folgenden Schritte ausführen:
- Mediensitzung erstellen und initialisieren
- Callback für Mediensitzung festlegen
- Setze den Empfänger der Medienschaltfläche der Mediensitzung auf null, damit ein Medienschaltflächenereignis den Player nicht neu startet, wenn er nicht sichtbar ist. Dies betrifft nur Geräte mit Android 5.0 (API-Level 21) und höher.
- Media Controller erstellen und initialisieren
Der folgende onCreate()
-Code veranschaulicht diese Schritte:
Kotlin
private lateinit var mediaSession: MediaSessionCompat
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Create a MediaSessionCompat
mediaSession = MediaSessionCompat(this, LOG_TAG).apply {
// Enable callbacks from MediaButtons and TransportControls
setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
// Do not let MediaButtons restart the player when the app is not visible
setMediaButtonReceiver(null)
// Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
val stateBuilder = PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PLAY_PAUSE)
setPlaybackState(stateBuilder.build())
// MySessionCallback has methods that handle callbacks from a media controller
setCallback(MySessionCallback())
}
// Create a MediaControllerCompat
MediaControllerCompat(this, mediaSession).also { mediaController ->
MediaControllerCompat.setMediaController(this, mediaController)
}
}
Java
MediaSessionCompat mediaSession;
PlaybackStateCompat.Builder stateBuilder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create a MediaSessionCompat
mediaSession = new MediaSessionCompat(this, LOG_TAG);
// Enable callbacks from MediaButtons and TransportControls
mediaSession.setFlags(
MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
// Do not let MediaButtons restart the player when the app is not visible
mediaSession.setMediaButtonReceiver(null);
// Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
stateBuilder = new PlaybackStateCompat.Builder()
.setActions(
PlaybackStateCompat.ACTION_PLAY |
PlaybackStateCompat.ACTION_PLAY_PAUSE);
mediaSession.setState(stateBuilder.build());
// MySessionCallback has methods that handle callbacks from a media controller
mediaSession.setCallback(new MySessionCallback());
// Create a MediaControllerCompat
MediaControllerCompat mediaController =
new MediaControllerCompat(this, mediaSession);
MediaControllerCompat.setMediaController(this, mediaController);
}
Wenn eine App geschlossen wird, empfängt die Aktivität die onPause()
- und onStop()
-Callbacks nacheinander. Wenn der Spieler eine Wiedergabe ausführt, müssen Sie sie beenden, bevor die Aktivität verschwindet. Die Wahl des Callbacks hängt von der Android-Version ab, die du verwendest.
Unter Android 6.0 (API-Level 23) und niedriger kann nicht garantiert werden, wann onStop()
aufgerufen wird. Sie kann 5 Sekunden nach dem Verschwinden Ihrer Aktivität aufgerufen werden. Daher sollte die Wiedergabe deiner App in Android-Versionen vor 7.0 im onPause()
beendet werden. Unter Android 7.0 und höher ruft das System onStop()
auf, sobald die Aktivität nicht mehr sichtbar ist. Das ist also kein Problem.
Zusammenfassung:
- Unter Android 6.0 und niedriger musst du den Player im
onPause()
-Callback anhalten.
- Ab Android-Version 7.0 musst du den Player über den
onStop()
-Callback anhalten.
Wenn die Aktivität den onDestroy()
-Callback empfängt, sollte sie den Player freigeben und bereinigen.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# Building a video player activity\n\nWhen the activity receives the `onCreate()` lifecycle callback method it should perform these steps:\n\n- Create and [initialize the media session](/guide/topics/media-apps/working-with-a-media-session#init-session)\n- Set the media session callback\n- Set the media session's media button receiver to null so that a [media button event](/guide/topics/media-apps/mediabuttons#restarting-inactive-mediasessions) won't restart the player when it is not visible. This only affects Android 5.0 (API level 21) and higher devices.\n- Create and initialize the media controller\n\nThe `onCreate()` code below demonstrates these steps: \n\n### Kotlin\n\n```kotlin\nprivate lateinit var mediaSession: MediaSessionCompat\n\npublic override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n\n // Create a MediaSessionCompat\n mediaSession = MediaSessionCompat(this, LOG_TAG).apply {\n\n // Enable callbacks from MediaButtons and TransportControls\n setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or\n MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)\n\n // Do not let MediaButtons restart the player when the app is not visible\n setMediaButtonReceiver(null)\n\n // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player\n val stateBuilder = PlaybackStateCompat.Builder()\n .setActions(PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PLAY_PAUSE)\n setPlaybackState(stateBuilder.build())\n\n // MySessionCallback has methods that handle callbacks from a media controller\n setCallback(MySessionCallback())\n }\n\n // Create a MediaControllerCompat\n MediaControllerCompat(this, mediaSession).also { mediaController -\u003e\n MediaControllerCompat.setMediaController(this, mediaController)\n }\n}\n```\n\n### Java\n\n```java\nMediaSessionCompat mediaSession;\nPlaybackStateCompat.Builder stateBuilder;\n\n@Override\npublic void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n\n // Create a MediaSessionCompat\n mediaSession = new MediaSessionCompat(this, LOG_TAG);\n\n // Enable callbacks from MediaButtons and TransportControls\n mediaSession.setFlags(\n MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |\n MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);\n\n // Do not let MediaButtons restart the player when the app is not visible\n mediaSession.setMediaButtonReceiver(null);\n\n // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player\n stateBuilder = new PlaybackStateCompat.Builder()\n .setActions(\n PlaybackStateCompat.ACTION_PLAY |\n PlaybackStateCompat.ACTION_PLAY_PAUSE);\n mediaSession.setState(stateBuilder.build());\n\n // MySessionCallback has methods that handle callbacks from a media controller\n mediaSession.setCallback(new MySessionCallback());\n\n // Create a MediaControllerCompat\n MediaControllerCompat mediaController =\n new MediaControllerCompat(this, mediaSession);\n\n MediaControllerCompat.setMediaController(this, mediaController);\n}\n```\n\nWhen an app is closed, the activity receives the `onPause()` and `onStop()` callbacks in succession. If the player is playing, you must stop it before its activity goes away. The choice of which callback to use depends on what Android version you're running.\n\nIn Android 6.0 (API level 23) and earlier there is no guarantee of when `onStop()` is called; it could get called 5 seconds after your activity disappears. Therefore, in Android versions earlier than 7.0, your app should stop playback in `onPause()`. In Android 7.0 and beyond, the system calls `onStop()` as soon as the activity becomes not visible, so this is not a problem.\n\nTo summarize:\n\n- In Android version 6.0 and earlier, stop the player in the `onPause()` callback.\n- In Android version 7.0 and later, stop the player in the `onStop()` callback.\n\nWhen the activity receives the `onDestroy()` callback, it should release and clean up your player."]]