2010-09-16 62 views
8

我該如何去閱讀一首歌曲所關聯的流派?我可以讀這首歌,但是我怎樣才能抓住這首歌的風格,它在哪裏存儲?獲取歌曲的流派

謝謝!

+0

我也在尋找相同。 – Sandy 2010-12-31 08:25:46

+0

看[這裏] [1] [1]:http://stackoverflow.com/questions/9785370/display-all-song-from-the-sd-card-genre-wise – user4232 2012-05-08 09:24:27

回答

-2

當它被設置在那裏時,你可以從它自己的mp3文件中分別從它的ID3標籤中得到它。應該有一些java庫在那裏幫助你從mp3文件訪問這些標籤。

+0

是的,但是通過MediaStore無法做到這一點?這就是我要找的。 – Jeff 2010-09-16 20:33:17

6

檢查這個代碼:

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

getContentUriForAudioId函數是什麼? – 2014-07-03 11:30:26

+0

我已經使用它,但它在android 2.3.5中崩潰,因爲在android 2.3.6中沒有Method。請幫助我的較低版本的設備。 – 2014-07-07 12:43:33

+0

這將只給你所有流派的列表,但不包括哪首歌曲屬於哪首歌曲 – jazz 2016-07-26 19:34:41

0

如果你還在尋找一個答案-----

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);