Android MediaStore.Audio不会加载所有MetaTag

时间:2016-03-02 10:15:59

标签: android audio tags loading mediastore

要获取Android设备上的所有本地音乐文件我正在使用ContentResolver,从MediaStore.Audio获取数据。 以下是我如何加载所有标题+他们的艺术家的示例:

ContentResolver musicResolver = act.getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
    Cursor musicCursor = musicResolver.query(musicUri, null, selection, null, sortOrder);

if(musicCursor!=null && musicCursor.moveToFirst()){
    int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
    int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);

    do {
        String thisTitle = musicCursor.getString(titleColumn);
        String thisArtist = musicCursor.getString(artistColumn);
        //save them somewhere
    }while (musicCursor.moveToNext());
}

所以这段代码适用于我所有音乐的75%左右。

但是有曲目,其中艺术家(以及其他一些值,如artistKey,Track,Cover等)返回null。但标题,album_name和artistId正确加载。

标签应该是正确的(显示在计算机和其他音乐应用程序上)。此格式也与正在运行的曲目不同。

你们当天有没有人遇到同样的问题并解决了这个问题? 所有缺少的元标记甚至都没有加载MediaMetadataRetriever。我无法解释我的某些文件存在的问题以及其他应用可以正确加载它们的原因。

如果需要,我可以在某处上传有效且无法使用的音乐文件。

1 个答案:

答案 0 :(得分:1)

管理如何做到这一点。

有些专辑只在一个(主要是第一个或最后一个)的曲目中存储了最多的信息(aristname,albumcover),而不是全部。 这不是很常见,但我的专辑中有大约20%有这个,即使他们被买了。

因此,如果您正在加载/显示这些专辑中的一个,您需要浏览所有专辑曲目,直到找到其中一个专辑曲目,其中存储了您在其他专辑中丢失的信息。 由于我的其他代码,我使它有点不同,但我认为这是最容易理解的方法。