2010-09-16 16 views
8

Wie lese ich das Genre, mit dem ein Song verbunden ist? Ich kann das Lied lesen, aber wie nehme ich das Genre für das Lied, wo ist es gespeichert?Holen Sie sich das Genre eines Songs

Danke!

+0

Ich bin auch der gleichen suchen. – Sandy

+0

Schauen Sie [hier] [1] [1]: http://stackoverflow.com/questions/9785370/display-all-song-from-the-sd-card-genre-wise – user4232

Antwort

-2

Sie können es aus der MP3-Datei selbst bzw. von seinen ID3-Tags bekommen, wenn es dort eingestellt wurde. Es sollte einige Java-Bibliotheken geben, die Ihnen den Zugriff auf diese Tags aus einer MP3-Datei erleichtern.

+0

Yep, aber über den MediaStore ist das nicht möglich? Das ist, was ich suche. – Jeff

6

Überprüfen Sie diesen Code:

public class MusicLibraryScanner { 

    private static Cursor mediaCursor; 
    private static Cursor genresCursor; 

    private static String[] mediaProjection = { 
      MediaStore.Audio.Media._ID, 
      MediaStore.Audio.Media.ARTIST, 
      MediaStore.Audio.Media.ALBUM, 
      MediaStore.Audio.Media.TITLE 
    }; 
    private static String[] genresProjection = { 
      MediaStore.Audio.Genres.NAME, 
      MediaStore.Audio.Genres._ID 
    }; 

    public static void getMusicFromStorage(Context context) { 

     mediaCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       mediaProjection, null, null, null); 

     int artist_column_index = mediaCursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST); 
     int album_column_index = mediaCursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM); 
     int title_column_index = mediaCursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
     int id_column_index = mediaCursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media._ID); 

     if (mediaCursor.moveToFirst()) { 
      do { 
       String info = "Song " + mediaCursor.getString(title_column_index) + " "; 
       info += "from album " + mediaCursor.getString(album_column_index) + " "; 
       info += "by " + mediaCursor.getString(artist_column_index) + ". "; 

       int musicId = Integer.parseInt(mediaCursor.getString(id_column_index)); 

       Uri uri = MediaStore.Audio.Genres.getContentUriForAudioId("external", musicId); 
       genresCursor = context.getContentResolver().query(uri, 
         genresProjection, null, null, null); 
       int genre_column_index = genresCursor.getColumnIndexOrThrow(MediaStore.Audio.Genres.NAME);     

       if (genresCursor.moveToFirst()) { 
        info += "Genres: "; 
        do { 
         info += genresCursor.getString(genre_column_index) + " "; 
        } while (genresCursor.moveToNext()); 
       } 

       Log.e("Audio scanner", "Song info: " + info); 
      } while (mediaCursor.moveToNext()); 
     } 
    } 
} 
+0

Was ist die Funktion getContentUriForAudioId? –

+0

Ich benutze das, aber es wird in der Android 2.3.5 abgestürzt, weil es keine Methode in android 2.3.6 gibt. Bitte helfen Sie mir für eine niedrigere Version des Geräts. –

+0

Dies gibt Ihnen nur eine Liste aller Genres, aber nicht welches Genre zu welchem ​​Lied gehört – jazz

0

Wenn Sie noch nach einer Antwort suchen -----

MediaMetadataRetriever mr = new MediaMetadataRetriever(); 

Uri trackUri = ContentUris.withAppendedId(
    android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,song_id); 

mr.setDataSource(mContext, trackUri); 

String thisGenre = mr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 
Verwandte Themen