MediaMetadataRetrieverを使ってメディアファイルのメタ情報を取得する
今回はAndroid2.3.3(APIレベル10)から追加されたandroid.media.MediaMetadataRetrieverクラスを使ってメディアファイルのメタ情報を取得する方法を説明します。
メタ情報とはJPEGでいうExif情報みたいなもので、MP3などのメディアファイルのアルバム名やアーティスト名などのことです。
それでは続きで説明していきます。
2011/4/11修正
メタ情報を取得するメディアファイルの指定
まずMediaMetadataRetrieverクラスのインスタンスを取得します。そしてそのインスタンスに対してsetDataSourceメソッドでメディアファイルを指定します。ファイルディスクリプタ、パス名、URIで指定することができます。
public void setDataSource (FileDescriptor fd, long offset, long length)
public void setDataSource (String path)
public void setDataSource (FileDescriptor fd)
public void setDataSource (Context context, Uri uri)
サンプルコードではパス名を指定しています。
メタ情報の取得
MediaMetadataRetrieverクラスのextractMetadataメソッドを利用します。引数に取得するメタ情報を表すキーを指定します。
public String extractMetadata (int keyCode)
例えばアーティト名を取得するには下記のように記述します。(ここでのmmrはMediaMetadataRetrieverのインスタンスです)
mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
もしメディアファイルにそのメタ情報が無い場合や、データリソースで指定したファイルが存在していなかった場合にはこのメソッドの戻り値がnullになります。
その他のメタ情報のKEYはサンプルコードやドキュメントを参照してください。
※2/9現在ではプレビュー版のためAndroideDevelopersのサイトにはHoneycomb(3.0)のAPIの情報は載っていません。ダウンロードする必要があります。
ジャケット(アートワーク)の取得
MediaMetadataRetrieverクラスではジャケット(アートワーク)を取得することもできます。
ジャケット(アートワーク)を取得するにはgetEmbeddedPictureメソッドを使います。
public byte[] getEmbeddedPicture ()
戻り値はbyte[]なので、実際にはBitmapFactoryクラスのdecodeByteArrayメソッドでBitmapクラスにデコードするなどして利用します。
メディアファイルにジャケット(アートワーク)が存在しない場合にはnullが返ります。
ImageView imageView = (ImageView)findViewById(R.id.ImageView); byte[] data = mmr.getEmbeddedPicture(); // 画像が無ければnullになる if (null != data) { imageView.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); }
サンプルコードについて
サンプルコードをそのまま動かしてみる場合は、SDカードにsample.mp3という名前で適当なMP3ファイルを配置してください。
または、onCreateメソッドでファイルを指定しているので、ここを任意のメディアファイルのパス名に修正してください。