Ändern der Datenquelle für die Audiowiedergabe mit dem vorhandenen MediaPlayer?

8

Ich versuche, denselben Media Player zu verwenden, aber die Datenquelle zu ändern. Hier ist, was ich versuche zu tun:

%Vor%

Ich rufe das einfach an, wenn ich zu einer neuen Mediendatei wechseln möchte. Es scheint jedoch nicht die Datenquelle erfolgreich zu ändern. Erste Frage: Ist es möglich, dies zu tun, oder muss ich den Media Player freigeben und für jede neue Datei einen neuen erstellen? Wenn es möglich ist, warum funktioniert dann mein Code nicht richtig?

Edit: Nun, das Freigeben und Wiederherstellen des Media Players tut es auch nicht! Es spielt einfach den gleichen Song!?!? Wie ist das überhaupt möglich? Neue Idee - Erstellen Sie für jeden Track einen anderen Media Player, muss ich das hier wirklich machen? Ist das ein Fehler in Android?

    
Alan Moore 30.08.2011, 13:53
quelle

4 Antworten

0

Nun, ich habe nie eine wirklich gute Antwort dafür bekommen. Ich denke, es könnte etwas Lustiges sein, das im Emulator passiert. Was ich getan habe, das funktioniert großartig für mich, ist, die Dateien auf die externe SD-Karte herunterzuladen und sie von dort abzuspielen. Das ändert den Code leicht zu diesem:

%Vor%

der Rest bleibt gleich.

    
Alan Moore 04.09.2011, 22:00
quelle
7

Stellen Sie sicher, dass Sie den Mediaplayer anhalten und zurücksetzen, bevor Sie die Datenquelle wechseln. Bei wichtigeren Dingen, wenn Sie aufhören, ruft

  

onCompletion

.. Überprüfen Sie also, was Sie bei dieser Methode tun. Dann rufe

an %Vor%     
Binod Singh 30.05.2013 06:10
quelle
2

Ich habe heute dasselbe Problem mit Assets gehabt, und ich kenne den Fix.

Das Problem ist, dass die Assets als ein großer Teil der Daten gespeichert werden und nicht als einzelne Dateien in einem echten Dateisystem. Wenn Sie also assetfiledescriptor erhalten, zeigt es sowohl auf eine Datei als auch auf einen Offset und eine Länge. Wenn Sie mediaplayer nur auf assetfiledescriptor selbst zeigen, wird immer die erste Mediendatei in Ihrem Assets-Ordner (oder etwas) abgespielt.

Wenn Sie dies tun: mMediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

Dann spielt es die richtige Datei.

    
Joe Marshall 09.07.2012 14:49
quelle
0

Sie deklarieren private String mediafile="my.mp3"; , dann verwenden Sie AssetFileDescriptor afd = getAssets().openFd(mediafile); , aber zu keinem Zeitpunkt (aus dem Code, den Sie gepostet haben) ändern Sie den Wert von mediafile .
 Ich würde empfehlen, mediafile = theNextFile; in die Zeile vor afd = getAssets().openFd(mediafile); zu setzen, wobei theNextFile wahrscheinlich auf eine Datei auf der SD-Karte verweisen würde, die der Benutzer ausgewählt hat, bevor er auf diese Schaltfläche geklickt hat.
Ich bin mir nicht sicher, wie man die Dateinamen von der SD-Karte erhält, aber ich würde denken, dass die Verwendung von startActivityForResult eine Möglichkeit wäre, dies zu tun.

    
Jakar 30.08.2011 22:49
quelle