2016-12-28 40 views
0

我一直在開發android音樂播放器,我想加載每個mp3標籤都有的封面圖片。我以前使用下面的代碼來提取圖像,但是,當列表視圖開始滾動時,它會產生很多錯誤,並且應用程序隨機崩潰。代碼如下。使用glide查詢mp3封面圖片

MediaMetadataRetriever retreve= new MediaMetadataRetriever(); 
retreve.setDataSource(songsList.get(songIndex).get("songPath")); 

byte [] data = mmr.getEmbeddedPicture(); 

這會拋出一個錯誤,指出以下消息,並隨機指出應用程序崩潰。

getEmbeddedPicture: Call to getEmbeddedPicture failed 

因此,我使用glide庫來加載圖像使用下面的代碼。

Glide.with(parent.getContext()).load(currSong.getPath()) 
      .placeholder(R.drawable.default_img).into(holder.albumImage); 

事情是我將歌曲路徑傳遞到加載函數,但不加載任何圖像!我記錄了路徑並顯示了mp3文件的正確路徑。

如何使用Glide庫加載圖像!如果有關於此的教程,請儘可能讓我知道。

+0

此鏈接顯示Glide示例。答案很古老,所以現在可能無法使用。 http://stackoverflow.com/questions/1954434/cover-art-on-android –

回答

0

我做了以下檢索並設置列表中的圖像。

要檢索專輯封面的歌曲: - 這是查詢

final Cursor mCursor = getContentResolver().query(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       new String[]{MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID}, null, null, 
       "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC"); 

爲了捕捉URI

long album_id=mCursor.getLong(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); 
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, album_id); 

然後在通過適配器設置列表

Uri uri=Uri.parse(data.get(position).getAlbum_art()); 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(ctx.getContentResolver(), uri); 
      holder.image.setImageBitmap(bitmap); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

你可以解釋'data.get(position).getAlbum_art()'代碼段!我無法建立您添加的其他代碼的鏈接! –

+0

其實我是從上面添加所有的uri到一個自定義的數組列表中,然後從該數組列表中獲取uri(專輯藝術) –

+0

好的!所以對於我來說,我應該只解析前面代碼中的'albumArtUri'? –