2013-06-30 34 views
2

获取专辑歌手我目前正在创建一个音乐播放器,我使用游标这样Android的 - 从光标

mCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
      requestedColumns, null, null, null); 

检索音乐的设备上,其中

private String[] requestedColumns = 
{ 
    MediaStore.Audio.Media.TITLE, 
    MediaStore.Audio.Media._ID, 
    MediaStore.Audio.Media.DATA, 
    MediaStore.Audio.Media.ALBUM, 
    MediaStore.Audio.Media.ALBUM_ID, 
    MediaStore.Audio.Media.ARTIST, 
    MediaStore.Audio.Media.ARTIST_ID, 
    MediaStore.Audio.Media.YEAR, 
    MediaStore.Audio.Media.DURATION,   
}; 

现在这个工作完美地,我成功地检索我的设备/ SD卡上的音乐。我的问题是:有没有什么办法让专辑艺术家为某首歌曲?现在,我不只是指这首歌曲的艺术家,而是歌曲所属的整个专辑背后的主要艺术家。似乎没有某种MediaStore.Audio.Media.ALBUM_ARTIST

附注:在使用MediaStore.Audio.Media.ALBUMMediaStore.Audio.ALBUMS之间有什么区别(如果有的话)?

回答

2

我认为你要找的是MediaStore.Audio.Albums.ARTIST,你可以看看它作为两阶段过程的第二部分。

Cursor cursor = getActivity().managedQuery(
    MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
    new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ARTIST}, 
    MediaStore.Audio.Albums._ID+ "=?", 
    new String[] {albumId}, 
    null); 

哪里albumId是歌曲,即你在你刚才的查询已经得到的相册ID:MediaStore.Audio.Media.ALBUM_ID

MediaStore.Audio.ALBUMS想象成你所有的专辑元数据。 MediaStore.Audio.Media.ALBUM指的是此音频文件所来自的专辑。 Media始终是关于每个单独文件的元数据。

+0

看起来像这只是以某种方式返回专辑的第一首歌曲的艺术家。是否真的没有办法让我在iTunes中声明的专辑艺术家? –

+1

根据您使用的Android版本,这可能会也可能不是问题:https://code.google.com/p/android/issues/detail?id=52309。或者,您可以跳过MediaStore并自己手动读取ID3标签 –

+0

即使我为minSDK 21开发,也会发生这种情况。 是否像MediaStore一样手动读取它们? –