Android之使用MediaMetadataRetriever类获取媒体信息

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述Android之使用MediaMetadataRetriever类获取媒体信息相关的知识,希望能为你提供帮助。
一.昨天。介绍了使用MediaMetadataRetriever类来获取视频第一帧:http://blog.csdn.net/u012561176/article/details/47858099,今天,来介绍一下使用MediaMetadataRetriever类获取媒体信息。

??1.当中用到了MediaMetadataRetriever类的无參构造函数:MediaMetadataRetriever()2.当中用到了MediaMetadataRetriever类的一些经常用法:setDataSource(String  path)或者其他參数的setDataSource()方法。以及返回字符串的extractMetadata(int keyCode)方法。
注:这里的extractMetadata(int keyCode)方法中的keyCode參数能够由MediaMetadataRetriever类的常量来得到,比如MediaMetadataRetriever.METADATA_KEY_ALBUM。
【Android之使用MediaMetadataRetriever类获取媒体信息】3.当中用到了MediaMetadataRetriever类的常量,这里我仅仅附上一部分常量的图:

Android之使用MediaMetadataRetriever类获取媒体信息

文章图片

剩余的常量大家能够自行查看API文档,也能够通过 http://android.toolib.net/reference/android/media/MediaMetadataRetriever.html  这个链接来查看,上述常量都是用在setDataSource方法之后的,然后通过extractMetadata(int keyCode)  方法来返回一个字符串类型的媒体信息,当中KeyCode即为上述MediaMetadataRetriever类的常量。




二.接下来附上一个小样例,在编写这个样例之前,要做以下三个步骤:
1.开启android模拟器。

2.打开File  Explorer视图。

3.将音乐文件放入到/storage/sdcard/Music底下,当中要注意假设你的SD卡存储位置,Android2.x的为/mnt/sdcard或者/sdcard,Android4.x为/storage/sdcard,放置成功后例如以下图所看到的:
Android之使用MediaMetadataRetriever类获取媒体信息

文章图片





三.最后。就能够编写我们这个Android小样例了,项目名为android_mediaMetadataRetriever1:
1.首先,进行布局,打开activity_main.xml布局文件,当中用的是垂直的线性布局。加入了七个TextView控件和一个Button控件,代码例如以下:

< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > < TextView android:id="@+id/ablum" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="哈哈" android:textSize="20sp" /> < TextView android:id="@+id/artist" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="哦哦" android:textSize="20sp" /> < TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="嗯嗯" android:textSize="20sp" /> < TextView android:id="@+id/mimetype" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="嘿嘿" android:textSize="20sp" /> < TextView android:id="@+id/duration" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="呃呃" android:textSize="20sp" /> < TextView android:id="@+id/bitrate" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="啊啊" android:textSize="20sp" /> < TextView android:id="@+id/date" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="噢噢" android:textSize="20sp" /> < Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取音乐信息" /> < /LinearLayout>



2.接着,開始编写我们的MainActivity类,点击上述布局的button控件,把获取到的媒体信息显示在7个TextView控件,代码例如以下:
package com.android_mediametadataretriever1; import java.io.File; import android.app.Activity; import android.media.MediaMetadataRetriever; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private TextView ablum; //声明TextView对象ablum private TextView artist; //声明TextView对象ablum_artist private TextView title; //声明TextView对象title private TextView mimetype; //声明TextView对象mimetype private TextView duration; //声明TextView对象duration private TextView bitrate; //声明TextView对象bitrate private TextView date; //声明TextView对象date private Button button; //声明Button对象button @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*获取布局管理器中的控件*/ ablum = (TextView) findViewById(R.id.ablum); artist=(TextView)findViewById(R.id.artist); title=(TextView)findViewById(R.id.title); mimetype=(TextView)findViewById(R.id.mimetype); duration=(TextView)findViewById(R.id.duration); bitrate=(TextView)findViewById(R.id.bitrate); date=(TextView)findViewById(R.id.date); button = (Button) findViewById(R.id.button); //加入按钮点击事件监听器 button.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) { // TODO Auto-generated method stub MediaMetadataRetriever mmr=new MediaMetadataRetriever(); //实例化MediaMetadataRetriever对象mmr File file=new File("/storage/sdcard/Music/music1.mp3"); //实例化File对象file,指定文件路径为/storage/sdcard/Music/music1.mp3 mmr.setDataSource(file.getAbsolutePath()); //设置mmr对象的数据源为上面file对象的绝对路径 String ablumString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); //获得音乐专辑的标题 String artistString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); //获取音乐的艺术家信息 String titleString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); //获取音乐标题信息 String mimetypeString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE); //获取音乐mime类型 String durationString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); //获取音乐持续时间 String bitrateString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); //获取音乐比特率。位率 String dateString=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); //获取音乐的日期 /* 设置文本的内容 */ ablum.setText("专辑标题为:"+ablumString); artist.setText("艺术家名称为:"+artistString); title.setText("音乐标题为:"+titleString); mimetype.setText("音乐的MIME类型为:"+mimetypeString); duration.setText("duration为:"+durationString); bitrate.setText("bitrate为:"+bitrateString); date.setText("date为:"+dateString); } }); }}

3.最后。由于我们是通过訪问文件sd卡的路径来设置数据源的。所以,必须在AndroidManifest.xml声明文件加入以下的许可,即权限:
< uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


注:当中必须注意的是使用MediaMetadataRetriever类要求android的minSdkVersion最小为14。所以假设你的AndroidManifest.xml文件里的android:minSDKVersion="8"即最小的sdk版本号小于14的话,将会报错。解决的方法能够在AndroidManifest.xml文件里改最小sdk版本号,也能够在MainActivity类中加上以下的代码:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)

使得我们使用这个MediaMetadataRetriever类不会报错。






四,部署此项目到Android模拟器上,执行效果例如以下:
Android之使用MediaMetadataRetriever类获取媒体信息

文章图片


点击获取音乐信息button时。例如以下图所看到的:
Android之使用MediaMetadataRetriever类获取媒体信息

文章图片


这样媒体信息将获取出来了,当中有些媒体信息没有的,将为空。





五.以上内容仅供大家学习參考。写得不好。请见谅。如有错误,请指出,谢谢!

??













    推荐阅读