如何获取和显示媒体播放器的album_art

时间:2011-02-25 00:50:30

标签: java android database

我已经花了很多年的时间寻找这个,现在我正处于我无法寻求帮助的地步。 我正在尝试在我正在使用的媒体播放器中显示专辑封面。我几乎所有其他功能齐全,包括其他元数据,播放专辑(与个别曲目相对)等。 我的代码目前如下:

public View getView(int position, View convertView, ViewGroup parent) {
     System.gc();

     View cellLayout = getLayoutInflater().inflate(R.layout.albumbrowsercell, null);
     ImageView album_art = (ImageView) cellLayout.findViewById(R.id.albums_album_cover);
     TextView album_title = (TextView) cellLayout.findViewById(R.id.albums_album_title);
     TextView artist_title = (TextView) cellLayout.findViewById(R.id.albums_artist_title);

     String albumName;
     String artistName;
     int albumID;

     album_column_index = albumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID);
     albumCursor.moveToPosition(position);
     albumID = albumCursor.getInt(album_column_index);
     Uri sArtworkUri = Uri.parse(MediaStore.Audio.Albums.ALBUM_ART);
     Uri uri = ContentUris.withAppendedId(sArtworkUri, albumID);
     album_art.setImageURI(uri);
     //code to do set text above etc.

return cellLayout;

Logcat提供类似于此的错误: I / System.out(12781):在坏位图uri上的resolveUri失败:album_art / 224 因此问题似乎是附加ID。我不知道怎么称呼它(我甚至使用随机数来看看我是否可以打一个)。

我可能犯了一个根本性的错误。到目前为止,我花费的大部分时间都花在学习如何与内容提供商等合作上,而且我对它们仍然没有50%的肯定(之前从未完成数据库或Android)。

此外,它是仅仅是我还是Android文档,至少关于这个主题,非常垃圾?

2 个答案:

答案 0 :(得分:3)

ALBUM_ART是列名,而不是内容URI。您需要查询相册并获取名为ALBUM_ART的列。这可能会给你一个ImageStore的URI(dunno,我自己没试过)。

顺便说一下,关于ABLUM_ART列有an open bug,但我建议您先尝试一下 - 抓住ALBUM_ART列并查看其中的内容。

示例代码(请注意,这不是我的头脑,所以可能是错误的):

Cursor cursor = getContentResolver().query(
              ContentUris.withAppendedId(
                  MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumId),
              new String[] { MediaStore.Audio.AlbumColumns.ALBUM_ART },
              null,
              null,
              null);

if (cursor.moveToFirst()) {
    String albumArtUri = cursor.getString(0);
}

cursor.close();

再一次,不保证这是有效的,我从来没有使用过媒体商店,而且我编写了这段代码而却无法测试它。

答案 1 :(得分:0)

这对我有用..

Cursor cursorAlbum = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
                new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},MediaStore.Audio.Albums._ID+ "=" + album_id, null, null);

        if(cursorAlbum != null  && cursorAlbum.moveToFirst()){

            String uri = cursorAlbum.getString(cursorAlbum.getColumnIndex("album_art"));
            cursorAlbum.close();
            if(uri != null ) 
                {
                    //Log.i("albumUri", uri);
                    wrapper.image.setImageURI(Uri.parse(uri));
                }
            }