2013-04-29 34 views
5

Tôi đang cố gắng để có được album nghệ thuật của một tập tin MP3. Tôi nghĩ cách tốt nhất và sạch nhất để làm điều này là sử dụng lớp MediaMetadataRetriever. Nhưng vì lý do nào đó, phương thức getEmbeddedPicture không hoạt động. Hình ảnh không hiển thị, LogCat thấy một lỗi:Nhận tập tin nhúng nhúng mp3 không thành công

04-29 18:36:19.520: E/MediaMetadataRetrieverJNI(25661): getEmbeddedPicture: Call to getEmbeddedPicture failed. 

Đây là mã mà dường như không làm việc:

@Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     MediaMetadataRetriever mmdr = new MediaMetadataRetriever(); 
     mmdr.setDataSource(path); //path of the MP3 file on SD Card 
     bites = mmdr.getEmbeddedPicture(); 
     if(bites != null) 
     artBM = BitmapFactory.decodeByteArray(bites, 0, bites.length); 
     return null; 
    } 

Tôi đang chạy nó trên một thiết bị với Android 4.2, vì vậy không nên có bất kỳ vấn đề nào với MediaMetadataRetriever (yêu cầu api lvl 10). Các tệp tôi đã thử nghiệm hiển thị một hình ảnh trong trình thám hiểm Windows, vì vậy có vẻ như đã được nhúng vào nghệ thuật. Có ai có suy nghĩ nào về vấn đề này nữa ko?

+0

Địa phương, nhưng có vẻ như nó phụ thuộc vào tệp. Trên các tệp MP3 khác, nó hiển thị ảnh bìa album. –

Trả lời

7

Không phải tất cả các file MP3 đã Album nghệ thuật nhúng, đối với một số album nghệ thuật Album được đặt bên trong thư mục album, vì vậy bạn có thể thấy album nghệ thuật cho tất cả các file trong thư mục đó,

Nhưng

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mp3_file_path); 

Thao tác này sẽ nhận được ảnh bìa album nếu nghệ thuật Album được nhúng vào tệp đó, Vì vậy, hãy tạo hình ảnh mặc định làm ảnh bìa album cho các tệp không được nhúng với ảnh bìa album và kiểm tra xem byte đã trả về có rỗng hay không,

Nếu byte [] không rỗng thì album nghệ thuật được lấy ra, nếu nó là null sau đó thiết lập các hình ảnh nghệ thuật album mặc định

Trong Im Dự án của tôi sử dụng này

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    mmr.setDataSource(songsList.get(index).get("songPath")); 
    byte[] artBytes = mmr.getEmbeddedPicture(); 
    if(artBytes != null) 
    { 
     InputStream is = new ByteArrayInputStream(mmr.getEmbeddedPicture()); 
     Bitmap bm = BitmapFactory.decodeStream(is); 
     imgArt.setImageBitmap(bm); 
    } 
    else 
    { 
     imgArt.setImageDrawable(getResources().getDrawable(R.drawable.adele)); 
    } 

Tôi hy vọng điều này sẽ giúp bạn

0

tôi nhận được cùng một vấn đề, có vẻ như không phải tất cả các tập tin mp3 đều có một album nghệ thuật. Những gì chúng ta nên làm là để thiết lập một hình ảnh mặc định cho hình ảnh.

public Bitmap getAlbumBitmap(Context context, String url, int defaultRes) { 
     Bitmap bitmap = null; 
     //能够获取多媒体文件元数据的类 
     MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
     try { 
      retriever.setDataSource(url); //设置数据源 
      byte[] embedPic = retriever.getEmbeddedPicture(); //得到字节型数据 
      bitmap = BitmapFactory.decodeByteArray(embedPic, 0, embedPic.length); //转换为图片 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       retriever.release(); 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
     } 
     return bitmap == null ? BitmapFactory.decodeResource(context.getResources(), defaultRes) : bitmap; 
    } 
Các vấn đề liên quan