2011-02-25 33 views
1

我已经花了很多时间寻找这个问题,现在我正处于无法寻求帮助的地步。
我试图在我使用的媒体播放器内显示专辑封面。我几乎一切功能齐全,包括其他元数据,播放专辑(对个别曲目)等 我的代码的时刻如下:如何获取并显示媒体播放器的album_art

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):resolveUri在错误的位图上失败uri:album_art/224 因此,问题似乎与attachedID有关。我不知道还有什么可以称呼它的(我甚至试图用随机数字来看看我是否可以击中一个)。

我可能犯了一个根本性的错误。我大部分时间都花在了学习如何与内容提供商等合作上,而我对它们的评价甚至还不到50%(从未完成过数据库或Android)。

此外,它是只是我还是Android的文档,至少关于这个话题,漂亮的垃圾?

回答

3

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

顺便说一句,有关于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(); 

同样,没有保证这个作品,我从未使用过的媒体商店,我写这个代码而不能测试它。

+0

所以我查询它像这样? String [] columnValues = { \t \t MediaStore.Audio.Albums.ALBUM_ART, }; \t albumArtCursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,columnValues,null,null,null); – stephenfin 2011-02-25 01:09:49

+0

我将添加一个示例。另外,我不会使用managedQuery,因为您可以再次立即关闭游标。 – EboMike 2011-02-25 01:11:21

+0

这里。增加了一个例子。 – EboMike 2011-02-25 01:15:26

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)); 
       } 
      }   
相关问题