2013-04-29 44 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; 
    } 

私は、Android 4.2のデバイス上でそれを実行している、画像はLogCatはエラーを示し、表示されていませんMediaMetadataRetrieverに問題はないはずです(api lvl 10が必要です)。私がテストしたファイルは、Windowsエクスプローラの画像を表示しているので、アートが埋め込まれているようです。誰もがこれについて考えている?

+0

ローカルですが、ファイルによって異なるようです。他のMP3ファイルには、アルバムアートが表示されます。 –

答えて

7

すべてのMP3ファイルが埋め込まれたアルバムアートを持っていない、

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mp3_file_path); 
をいくつかのアルバムのためにアルバムアートをアルバムフォルダ内に配置されるので、あなたはそのフォルダ内のすべてのファイルのアルバムアートを見ることができ、

しかし

これは、アルバムアートがそのファイルに埋め込まれている場合にアルバムアートを取得するので、アルバムアートに埋め込まれていないファイルのアルバムアートとしてデフォルトイメージを作成し、返されたバイト[]がヌルであるかどうかを確認します。

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