2013-04-29 39 views
5

Bir MP3 dosyasının albüm resmini almaya çalışıyorum. Bunu yapmanın en iyi ve en temiz yolunun MediaMetadataRetriever sınıfını kullanacağını düşündüm. Ancak, getEmbustPicture yöntemini çağırmanın bir nedeni çalışmıyor.Gömülü mp3 dosyası gömülü gömülü resim dosyası alınamadı

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

Bu görünmüyor kod çalışmaya edilir:: Görüntü LogCat bir hata gösteriyor, gösterilmiyor

@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; 
    } 

Ben Android 4.2 olan bir cihazda taratıyorum, Yani MediaMetadataRetriever ile ilgili herhangi bir sorun olmamalıdır (api lvl 10 gerektirir). Test ettiğim dosyalar Windows gezginde bir görüntü gösteriyor, bu yüzden gömülü resimler var gibi görünüyor. Bunun hakkında herhangi bir fikri olan var mı?

+0

Yerel, ama buna dosyaya bağlıdır görünüyor. Diğer MP3 dosyalarında albüm resmini gösterir. –

cevap

7

Tüm MP3 dosyaları albüm kapakları sizi bu klasörün içinde tüm dosyalar için albüm kapağını görebilmeniz bazı albümler için albüm kapakları, albüm klasörünün içindeki

Ama

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mp3_file_path); 
yerleştirilir, katıştırılmış

Bu,

albüm kapağı bu dosyada gömülü olduğu takdirde albüm sanatı olsun, Yani albüm sanat ile gömülü dosyalar için albüm kapağı gibi varsayılan bir resim yapmak ve iade byte [] boş olup olmadığını kontrol edecektir

Eğer bayt [] boş değilse o zaman Albüm resmi null ise o zaman bu sana aynı sorunu olsun

0

yardımcı olacağını umuyoruz bu

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)); 
    } 

kullanarak Proje Im In varsayılan albüm kapağı görüntüsünü

set, alınan, öyle görünüyor tüm mp3 dosyası bir Albüm sanatına sahip değildir. Yapmamız gereken, Resme varsayılan bir resim ayarlamaktır.

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; 
    }