2013-04-29 7 views
5

Próbuję uzyskać okładkę albumu pliku MP3. Myślałem, że najlepszym i najczystszym sposobem na to jest użycie klasy MediaMetadataRetriever. Ale z jakiegoś powodu wywoływanie metody getEmbeddedPicture nie działa. Obraz nie jest wyświetlane, LogCat pokazuje błąd:Wbudowana sztuka osadzania pliku mp3 nie powiodła się

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

Jest to kod, który nie wydaje się działać:

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

Używam go na urządzeniu z Androidem 4.2 więc nie powinno być problemu z MediaMetadataRetriever (wymaga api lvl 10). Przetestowane przeze mnie pliki pokazują obraz w Eksploratorze Windows, więc wydaje się, że jest on osadzony w grafice. Ktoś ma jakieś przemyślenia na ten temat?

+0

Lokalnie, ale wygląda na to, że zależy to od pliku. W innych plikach MP3 pokazuje okładkę albumu. –

Odpowiedz

7

nie wszystkie pliki MP3 mają Okładka albumu osadzona w przypadku niektórych płyt sztuka Album jest umieszczony wewnątrz folderu albumu, dzięki czemu można zobaczyć okładkę albumu dla wszystkich plików wewnątrz tego folderu,

Ale

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

Spowoduje to wyświetlenie okładki albumu, jeśli okładka albumu jest osadzona w tym pliku, więc zrób domyślny obraz jako okładkę albumu dla plików, które nie są osadzone w okładce albumu, i sprawdź, czy zwrócony bajt [] ma wartość null lub nie,

Jeśli bajt [] nie jest pusty, a następnie okładka albumu zostanie pobrana, jeżeli jest null następnie ustawić sztuki domyślny obraz albumu

w moim projekcie im przy tej

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

Mam nadzieję, że to pomoże Ci

0

uzyskać ten sam problem, wydaje się, że nie wszystkie pliki mp3 mają okładki albumów. Powinniśmy ustawić domyślny obraz obrazu.

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; 
    } 
Powiązane problemy