2013-04-29 6 views
5

MP3 파일의 앨범 아트를 얻으려고합니다. 가장 좋은 방법은 MediaMetadataRetriever 클래스를 사용하는 것입니다. 그러나 getEmbeddedPicture 메서드를 호출하는 몇 가지 이유로 작동하지 않습니다.임베디드 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; 
    } 

내가 안드로이드 4.2 장치에 그것을 실행하는거야, 그래서 MediaMetadataRetriever에 문제가 있어서는 안됩니다 (api lvl 10 필요). 테스트 한 파일은 Windows 탐색기에 이미지가 표시되어 있으므로 아트가 포함 된 것처럼 보입니다. 누구든지 이것에 대해 어떤 생각을 가지고 있습니까?

+0

로컬이지만 파일에 따라 달라질 수 있습니다. 다른 MP3 파일에는 앨범 아트가 표시됩니다. –

답변

7

모든 MP3 파일은 앨범 아트는 해당 폴더 내의 모든 파일에 앨범 아트를 볼 수 있도록 일부 앨범의 앨범 아트는 앨범 폴더 안에

그러나

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mp3_file_path); 
을 배치, 임베디드있다

앨범 아트가 해당 파일에 포함되어있는 경우 앨범 아트를 가져 오므로 앨범 아트에 포함되지 않은 파일의 앨범 아트로 기본 이미지를 만들고 반환 된 바이트 []가 null인지 아닌지 확인하십시오 (

).

byte []가 null이 아니고 앨범 아트 인 경우 이 null의 경우, 나는이 당신에게 나는이 같은 문제를 얻을 수

0

도움이 될 것입니다 희망이

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

를 사용하여 내 프로젝트 임에 기본 앨범 아트 이미지

을 설정, 검색, 그것은 보인다 모든 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; 
    }