Der schnellste Weg ist über MediaMetadataRetriever
. Allerdings gibt es ein Fang
wenn Sie URI und Kontext verwenden Datenquelle einstellen können Sie Fehler https://code.google.com/p/android/issues/detail?id=35794
Lösung absoluten Pfad der Datei-Metadaten von Mediendatei abgerufen wird verwenden begegnen.
Unten ist der Code-Schnipsel, so zu tun
private static String getDuration(File file) {
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(file.getAbsolutePath());
String durationStr = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Utils.formateMilliSeccond(Long.parseLong(durationStr));
}
Jetzt können Sie Millisekunde für Menschen lesbaren Format entweder von unten Formate konvertieren mit
/**
* Function to convert milliseconds time to
* Timer Format
* Hours:Minutes:Seconds
*/
public static String formateMilliSeccond(long milliseconds) {
String finalTimerString = "";
String secondsString = "";
// Convert total duration into time
int hours = (int) (milliseconds/(1000 * 60 * 60));
int minutes = (int) (milliseconds % (1000 * 60 * 60))/(1000 * 60);
int seconds = (int) ((milliseconds % (1000 * 60 * 60)) % (1000 * 60)/1000);
// Add hours if there
if (hours > 0) {
finalTimerString = hours + ":";
}
// Prepending 0 to seconds if it is one digit
if (seconds < 10) {
secondsString = "0" + seconds;
} else {
secondsString = "" + seconds;
}
finalTimerString = finalTimerString + minutes + ":" + secondsString;
// return String.format("%02d Min, %02d Sec",
// TimeUnit.MILLISECONDS.toMinutes(milliseconds),
// TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
// TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
// return timer string
return finalTimerString;
}
dass versucht, aber es gibt immer 0 aus irgendeinem Grund – Simon
Egal, ich habe es funktioniert! Ich habe MediaPlayer.getDuration() in der MediaPlayer.setOnPreparedListener-Methode aufgerufen und gibt 0 zurück 0 – Simon