【问题标题】:Android ContentResolver doesn't load the Song-TitlesAndroid ContentResolver 不加载歌曲标题
【发布时间】:2016-05-14 21:15:23
【问题描述】:

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

我的代码:

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 显示正确,因为 Filename 等于 Song-Title,但其他显示不正确!

编辑:

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

希望你能帮帮我!

谢谢!

【问题讨论】:

    标签: java android android-contentresolver mediastore


    【解决方案1】:

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

    试试这个

        ContentResolver musicResolver = getContentResolver();
    
        Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    
        Cursor cSong = musicResolver.query(musicUri,new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DATA},null,null,null);
    

    【讨论】:

    • 这不会改变任何东西!请注意我的编辑:)
    【解决方案2】:

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

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

    你也可以得到艺术家和专辑

    【讨论】:

    • 这导致我的应用程序启动时间很长...还有其他可能吗?
    • 问题根本没有解决,错误依旧存在
    • 不幸的是,这确实需要一段时间。我只将它直接用于文件本身而不是内容提供者,并且它返回了正确的数据。看来内容提供者可能是造成虚假数据的原因!
    • 不,我认为问题是由 wma 和 m4a 文件引起的!请检查我的编辑!
    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2011-03-15
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多