Ich habe folgenden Code:
AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
Das Problem ist, dass beim Ausführen dieses Codes alle Audiodateien im Assets-Verzeichnis in alphabetischer Reihenfolge abgespielt werden, anstatt nur die von mir angeforderte Audiodatei abzuspielen. Was mache ich falsch? Gibt es eine bessere Möglichkeit, Audiodateien aus dem Assets-Verzeichnis abzuspielen?
Folgefrage: Gibt es einen Unterschied zwischen der Speicherung von Audiodateien im Assets-Verzeichnis und der Speicherung im Verzeichnis res / raw? Abgesehen von der Tatsache, dass sie keine IDs erhalten, wenn sie sich im Assets-Verzeichnis befinden. Wenn ich die Audiodateien in den Ordner res / raw verschiebe, habe ich ein Problem mit der Wiederverwendung von MediaPlayer
s, da es keinen ID-Parameter für gibt setDataSource()
. Ich kann keine gute Richtlinie für den Umgang mit solchen Problemen finden.
quelle
Diese Funktion wird richtig funktionieren :)
quelle
MediaPlayer m
mussstatic
eine andere Referenz sein oder haben . Wenn Siem
in einer Funktion ohne Referenz haben,GC
wird es "sammeln"Hier meine statische Version:
quelle
Korrektur der obigen Funktion für Wiedergabe und Pause
quelle
Ton starten
Methode
quelle
das funktioniert bei mir:
In der Hauptaktivität beim Erstellen:
Verwendung im Code (beim Klicken auf die Schaltfläche):
quelle