2013-04-29 11 views
5

Sto cercando di ottenere la copertina dell'album di un file MP3. Ho pensato che il modo migliore e più pulito per farlo è utilizzare la classe MediaMetadataRetriever. Ma per qualche ragione, il metodo getEmbeddedPicture non funziona. L'immagine non è visibile, LogCat mostra un errore:Acquisisci arte incorporata nel file mp3 incorporato non riuscito

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

Questo è il codice che non sembra funzionare:

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

Sono in esecuzione su un dispositivo con Android 4.2, quindi non ci dovrebbero essere problemi con MediaMetadataRetriever (richiede api lvl 10). I file che ho provato mostrano un'immagine in Windows Explorer, quindi sembra che ci sia un'arte incorporata. Qualcuno ha qualche pensiero su questo?

+0

Locale, ma sembra che dipenda dal file. Su altri file MP3 mostra la copertina dell'album. –

risposta

7

Non tutti i file MP3 sono album arte incorporato, per alcuni album la copertina dell'album è collocato all'interno della cartella album, in modo da poter visualizzare le copertine degli album per tutti i file all'interno di quella cartella,

Ma

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

Ottiene la copertina dell'album se la copertina dell'album è incorporata in tale file, quindi crea un'immagine predefinita come copertina per i file che non sono incorporati con la copertina dell'album e controlla se il byte restituito [] è nullo o no,

Se il byte [] non è nullo quindi Album art viene recuperato, se si tratta di nulla quindi impostare l'immagine di copertina dell'album di default

nel mio progetto Im usando questo

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

Spero che questo vi aiuterà a

0

ottengo lo stesso problema, sembra che non tutti i file mp3 hanno una copertina di album. Quello che dovremmo fare è impostare un'immagine predefinita per l'immagine.

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