In diesem Dokument werden die grundlegenden Konzepte vorgestellt, mit denen Sie vertraut sein sollten, bevor Sie mit dem Media Player arbeiten.
Audio- und Videokurse
Die folgenden Klassen spielen Audio und Video im Android-Framework ab:
MediaPlayer
: Diese Klasse ist die primäre API für die Wiedergabe von Audio und Video.AudioManager
: Diese Klasse verwaltet Audioquellen und die Audioausgabe auf einem Gerät.
Manifesterklärungen
Bevor Sie mit der Entwicklung Ihrer App mit MediaPlayer beginnen, müssen Sie in Ihrem Manifest die entsprechenden Deklarationen hinzufügen, um die Verwendung der zugehörigen Funktionen zu ermöglichen.
Internetberechtigung:Wenn Sie Netzwerkinhalte mit dem MediaPlayer streamen, muss Ihre Anwendung den Netzwerkzugriff anfordern.
<uses-permission android:name="android.permission.INTERNET" />
Wakelock-Berechtigung:Wenn deine Player-App verhindern muss, dass das Display gedimmt oder der Prozessor in den Ruhemodus versetzt wird, oder die Methoden
MediaPlayer.setScreenOnWhilePlaying(boolean)
oderMediaPlayer.setWakeMode(android.content.Context, int)
verwendet, musst du diese Berechtigung anfordern.<uses-permission android:name="android.permission.WAKE_LOCK" />
MediaPlayer-Klasse verwenden
Die Klasse MediaPlayer
ist eine wichtige Komponente des Medien-Frameworks.
Ein Objekt dieser Klasse kann Audio- und Videoinhalte mit minimaler Einrichtung abrufen, decodieren und wiedergeben. MediaPlayer
unterstützt mehrere Medienquellen, darunter:
- Lokale Ressourcen
- Interne URIs, z. B. von einem Content Resolver
- Externe URLs (Streaming)
Eine Liste der von Android unterstützten Medienformate finden Sie auf der Seite Unterstützte Medienformate.
Beispiele für die Arbeit mit Audioquellen
Hier ist ein Beispiel für die Wiedergabe von Audio, das als lokale Rohressource verfügbar ist (im Verzeichnis res/raw/
Ihrer Anwendung gespeichert):
Kotlin
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you
Java
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
In diesem Fall ist eine „rohe“ Ressource eine Datei, die vom System nicht auf eine bestimmte Weise geparst wird. Der Inhalt dieser Ressource sollte jedoch kein Rohaudio sein. Es muss sich um eine korrekt codierte und formatierte Mediendatei in einem der unterstützten Formate handeln.
So kannst du Inhalte über einen URI abspielen, der lokal im System verfügbar ist (z. B. über einen Content Resolver abgerufen):
Kotlin
val myUri: Uri = .... // initialize Uri here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(applicationContext, myUri)
prepare()
start()
}
Java
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
Das Abspielen über eine Remote-URL mit HTTP-Streaming sieht so aus:
Kotlin
val url = "http://........" // your URL here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(url)
prepare() // might take long! (for buffering, etc)
start()
}
Java
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
Asynchrone Vorbereitung zur Leistungssteigerung verwenden
Beachten Sie die Leistung, wenn Sie MediaPlayer
verwenden. So kann beispielsweise der Aufruf von prepare()
sehr lange dauern, da möglicherweise Mediendaten abgerufen und decodiert werden müssen. Wie bei jeder Methode, deren Ausführung lange dauern kann, sollten Sie sie niemals über den UI-Thread Ihrer Anwendung aufrufen. Dadurch reagiert die Benutzeroberfläche nicht mehr, bis die Methode zurückgegeben wird. Das ist nicht nutzerfreundlich und kann zu einem ANR-Fehler (App antwortet nicht) führen.
Um ein Aufhängen des UI-Threads zu vermeiden, starten Sie einen weiteren Thread, um die MediaPlayer
vorzubereiten, und benachrichtigen Sie den Hauptthread, wenn Sie fertig sind. Das Framework bietet eine praktische Möglichkeit, die Methode prepareAsync()
für diese Aufgabe auszuführen. Diese Methode startet die Vorbereitung der Medien im Hintergrund und gibt sofort eine Antwort zurück. Wenn die Medien fertig vorbereitet sind, wird die Methode onPrepared()
des MediaPlayer.OnPreparedListener
aufgerufen, die über setOnPreparedListener()
konfiguriert wurde.
Weitere Informationen
Jetpack Media3 ist die empfohlene Lösung für die Medienwiedergabe in Ihrer App. Weitere Informationen
Auf diesen Seiten finden Sie Themen zum Aufzeichnen, Speichern und Abspielen von Audio- und Videoinhalten: