2009-12-23 181 views
23

我正在開發一種Android的媒體播放器。問題是我如何才能在android上獲得音頻文件的封面藝術。 例如,默認安卓媒體播放器在列出相冊時會顯示專輯封面,如何獲取此作品。Android上的封面藝術

+0

由於您需要幫助的部分應用程序似乎有點混淆,因此您可能需要相應更新您的問題。 – 2010-01-02 22:47:25

+1

你也可以試試這個:http://stackoverflow.com/questions/10209176/extract-album-cover-from-mp3-file-in-android?rq=1 – Chepech 2014-01-22 16:47:00

回答

43
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); 
ContentResolver res = context.getContentResolver(); 
InputStream in = res.openInputStream(uri); 
Bitmap artwork = BitmapFactory.decodeStream(in); 

更完整的示例代碼可以在Android音樂播放器源代碼中找到https://github.com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java方法getArtworkQuick。

+0

我嘗試了上面的代碼,我能夠在模擬器上獲得專輯封面,但在我的Galaxy S上沒有正確的順序,我可以看到專輯封面MP3,我有超過100個文件。在我的Galaxy S上還有一首這樣的歌曲,它顯示了錯誤歌曲的形象(只有最上面的歌曲)。任何建議來解決這個問題? – 2011-07-05 19:53:02

+1

這是我的錯誤,而不是專輯ID,我通過歌曲ID。它的工作現在很好。謝謝 – 2011-07-05 20:27:01

+0

嘿...你怎麼得到一首特定歌曲的albumid? – 2013-06-27 11:31:26

0

Android只識別名爲「AlbumArt.jpg」的文件作爲唱片集封面。只要把這個名字的圖片放在相冊文件夾中,你就會好起來的。

+1

對不起,也許這個問題有點混亂。我正在開發一個應用程序,我想從我的應用程序中獲取專輯封面。 – 2009-12-23 18:26:36

0

我不知道你是否讀過谷歌正在使Stackoverflow的official Android app development Q&A medium,但對於初學者的問題......現在,我什麼都不知道有關Andriod的發展,但快速搜索Android開發者網站,我發現這一點:

MediaStore.Audio.AlbumColumns

希望對大家有所幫助。

+1

是的,我也注意到有MediaStore.Audio.AudioColumns.ALBUM_ART,但它不存在actual.ContentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null); - 返回所有列的光標,ALBUM_ART不在那裏。 – 2009-12-23 22:19:36

+1

光標中只有ALBUM,ALBUM_ID,ALBUM_KEY列,但沒有ALBUM_ART – 2009-12-23 22:28:17

2

根據你對他人的評論,你的問題似乎不是關於Android,而是更多關於如何獲得專輯封面的一般信息。也許this article從亞馬遜檢索專輯封面將會很有幫助。一旦你有本地副本並按照Nick的建議存儲它,我相信你應該能夠按照Fudgey的建議進行檢索。

+0

不,我不想一般地拿到專輯封面。在封面藝術的ID3v2標籤中有可選的字段。 Android是解析大部分ID3v2字段,問題是如何讓ID3v2標記中的嵌入式隱祕藝術不使用亞馬遜或其他一些網絡服務 – 2010-01-03 15:02:04

+1

也許這個問題有點混淆,也許正確的解決方法是從附件中提取「附加圖片」 Android上的ID3v2標籤。 http://www.id3.org/id3v2.3.0關於附加圖片的更多信息 – 2010-01-03 15:06:49

2

在這裏,我可以附加一個功能,即從媒體商店返回專輯封面。

在這裏,我們只需要通過我們從媒體商店獲得的album_id。

public Bitmap getAlbumart(Long album_id) 
    { 
     Bitmap bm = null; 
     try 
     { 
      final Uri sArtworkUri = Uri 
       .parse("content://media/external/audio/albumart"); 

      Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); 

      ParcelFileDescriptor pfd = context.getContentResolver() 
       .openFileDescriptor(uri, "r"); 

      if (pfd != null) 
      { 
       FileDescriptor fd = pfd.getFileDescriptor(); 
       bm = BitmapFactory.decodeFileDescriptor(fd); 
      } 
    } catch (Exception e) { 
    } 
    return bm; 
} 
5

您可以使用

MediaMetadataRetriever

類,並獲得跟蹤信息,即標題,藝術家,專輯,圖片

Bitmap GetImage(String filepath)    //filepath is path of music file 
{ 
Bitmap image; 

MediaMetadataRetriever mData=new MediaMetadataRetriever(); 
mData.setDataSource(filePath); 
    try{ 
      byte art[]=mData.getEmbeddedPicture(); 
      image=BitmapFactory.decodeByteArray(art, 0, art.length); 
     } 
    catch(Exception e) 
     { 
      image=null; 
     } 
    return image; 
} 
7

我不知道爲什麼每個人都使它變得如此複雜,你可以使用Glide來achi前夕這在最簡單的和與只有1行代碼

有效的方式聲明這個路徑中應用的常量 -

final public static Uri sArtworkUri = Uri 
       .parse("content://media/external/audio/albumart"); 

獲取圖像的Uri使用相冊ID

Uri uri = ContentUris.withAppendedId(PlayerConstants.sArtworkUri, 
         listOfAlbums.get(position).getAlbumID()); 

現在簡單地顯示專輯封面使用uri: -

Glide.with(context).load(uri).placeholder(R.drawable.art_default).error(R.drawable.art_default) 
        .crossFade().centerCrop().into(holder.albumImage); 

glide將處理緩存,scali ng和延遲加載圖像給你。

希望它有助於某人。

+2

感謝哥們這對我有用.... – redblood 2016-03-27 00:22:33

相關問題