Android ContentResolver不会加载歌曲标题

时间:2016-05-14 11:26:45

标签: java android android-contentresolver mediastore

我的应用程序应该从存储在设备存储器中的歌曲加载媒体标签,但显示的名称是文件名而不是标题标签!

我的代码:

List<Song> SongList = new ArrayList<>();

ContentResolver musicResolver = mContext.getContentResolver();

Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

Cursor cSong = musicResolver.query(musicUri, null, null, null, null);

int iIDCol = cSong.getColumnIndex(MediaStore.Audio.Media._ID);
int iTitleCol = cSong.getColumnIndex(MediaStore.Audio.Media.TITLE);
int iArtistCol = cSong.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int iAlbumCol = cSong.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int iDurationCol = cSong.getColumnIndex(MediaStore.Audio.Media.DURATION);
int iAlbumIDCol = cSong.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
int iDataCol = cSong.getColumnIndex(MediaStore.Audio.Media.DATA);

if (cSong != null && cSong.moveToFirst()) {
    do {
        String sArtist = cSong.getString(iArtistCol);
        String sAlbum = cSong.getString(iAlbumCol);

        if (sArtist.equals(MediaStore.UNKNOWN_STRING)) {
            sArtist = mContext.getResources().getString(R.string.UnknownArtist);
        }

        if (sAlbum.equals(MediaStore.UNKNOWN_STRING)) {
            sAlbum = mContext.getResources().getString(R.string.UnknownAlbum);
        }

        SongList.add(new Song(cSong.getLong(iIDCol), cSong.getLong(iAlbumIDCol), cSong.getString(iTitleCol), sArtist, sAlbum, cSong.getInt(iDurationCol), cSong.getString(iDataCol)));
    }
    while (cSong.moveToNext());
}

cSong.close();

#Selfie显示正确,因为文件名等于歌曲标题,但其他文件没有正确显示!

修改

我检查过只有非MP3文件会导致问题!我该如何解决这个问题?

我希望你能帮助我!

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用MediaMetadataRetriever获取标题等:

String data = cursor.getString(iDataCol)
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(data);

String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

你可以得到艺术家&amp;专辑太

答案 1 :(得分:0)

我认为问题是你没有为getContentResolver.query()方法设置投影参数

试试这个

ACode