Ich versuche, das Genre jedes Songs zu greifen, während ich die Lieder laden. Zur Zeit verwende ich diese Lösung:Am effizientesten Weg zum Genre des Songs Android
MediaMetadataRetriever mr = new MediaMetadataRetriever();
Uri trackUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
cursor.getLong(id));
mr.setDataSource(c, trackUri);
String genre = mr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
Es funktioniert, dauert aber eine wahnsinnig lange Zeit. Auf meinem Testtelefon mit nur ~ 20 Songs funktioniert es schnell, aber auf meinem Haupttelefon mit 1700 + Songs dauert es sehr lange. Wenn ich diesen Code entferne und nur die Songs lade, ist es fast augenblicklich, also weiß ich, dass es das sein muss. Gibt es eine bessere/effizientere Möglichkeit, das Genre eines Songs mit der Song-ID zu erhalten?
Vielen Dank im Voraus für jede Hilfe!
Voll Code-Schnipsel
try {
if (cursor.moveToFirst()) {
int id = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
int title = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int album = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int artist = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int duration = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
int albumId = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
int data = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
do {
MediaMetadataRetriever mr = new MediaMetadataRetriever();
Uri trackUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
cursor.getLong(id));
mr.setDataSource(c, trackUri);
String genre = mr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
if (genre == null){
genre = "Not Specified";
}
genres.add(genre);
Song item = new Song(cursor.getLong(id), cursor.getString(title),
cursor.getString(artist), cursor.getString(album),
cursor.getLong(duration),
ContentUris.withAppendedId(albumArtUri, cursor.getLong(albumId)),
Uri.parse(cursor.getString(data)), "");
items.add(item);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
Ist dies innerhalb einer Schleife? Könnten Sie den Code in die gesamte Schleife schreiben? –
Entschuldigung für die späte Antwort, ich habe das vollständige Snippet in meiner ursprünglichen Frage gepostet. Vielen Dank! – Tino