2013-04-29 2 views
5

Я пытаюсь получить обложку альбома в формате MP3. Я думал, что лучший и самый чистый способ сделать это - использовать класс MediaMetadataRetriever. Но почему-то вызов метода getEmbeddedPicture не работает. Изображение не отображается, LogCat показывает ошибку:Получить встроенный mp3-файл вложенным искусством не удалось

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

Это код, который не похоже на работу:

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

Я бегу это на устройстве с Android 4.2, поэтому не должно быть никаких проблем с MediaMetadataRetriever (требуется api lvl 10). Файлы, которые я тестировал, показывают изображение в проводнике Windows, поэтому, похоже, вложенное искусство. У кого-нибудь есть мысли по этому поводу?

+0

Местный, но похоже, что это зависит от файла. В других MP3-файлах это показывает обложку альбома. –

ответ

7

Не все MP3 файлы обложки альбомов, для некоторых альбомов искусство Альбом находится в папке альбома, так что вы можете увидеть обложку альбома для всех файлов внутри этой папки,

Но

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

Это позволит получить искусство альбома, если в этот файл встроено искусство альбома. Поэтому сделайте изображение по умолчанию в качестве обложки для альбомов для файлов, которые не встроены в обложку альбома, и проверьте, является ли возвращенный байт [] нулевым или нет,

Если байт [] не равен null, то Album art извлекается, если она равна нулю, то установить альбом по умолчанию художественный образ

в моем проекте Im использовании этого

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

Я надеюсь, что это поможет вам

0

я получаю ту же проблему, кажется, что не у всех файлов mp3 есть альбом. Нам нужно установить изображение по умолчанию для изображения.

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; 
    } 
Смежные вопросы