Android写出常用媒体类,Android之使用MediaMetadataRetriever类获取媒体信息

一.昨天,介绍了使用MediaMetadataRetriever类来获取视频第一帧:

http://www.voidcn.com/article/p-uuucqbfk-beb.html,今天,来介绍一下使用MediaMetadataRetriever类获取媒体信息。

1.其中用到了MediaMetadataRetriever类的无参构造函数:MediaMetadataRetriever()

2.其中用到了MediaMetadataRetriever类的一些常用方法:setDataSource(String path)或者其它参数的setDataSource()方法,以及返回字符串的extractMetadata(int keyCode)方法。

注:这里的extractMetadata(int keyCode)方法中的keyCode参数可以由MediaMetadataRetriever类的常量来得到,例如MediaMetadataRetriever.METADATA_KEY_ALBUM。

3.其中用到了MediaMetadataRetriever类的常量,这里我只附上一部分常量的图:

0818b9ca8b590ca3270a3433284dd417.png

剩余的常量大家可以自行查看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,放置成功后如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

三.最后,就可以编写我们这个Android小例子了,项目名为android_mediaMetadataRetriever1:

1.首先,进行布局,打开activity_main.xml布局文件,其中用的是垂直的线性布局,添加了七个TextView控件和一个Button控件,代码如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/ablum"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="哈哈"

android:textSize="20sp" />

android:id="@+id/artist"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="哦哦"

android:textSize="20sp" />

android:id="@+id/title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="嗯嗯"

android:textSize="20sp" />

android:id="@+id/mimetype"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="嘿嘿"

android:textSize="20sp" />

android:id="@+id/duration"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="呃呃"

android:textSize="20sp" />

android:id="@+id/bitrate"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="啊啊"

android:textSize="20sp" />

android:id="@+id/date"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:text="噢噢"

android:textSize="20sp" />

android:id="@+id/button"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="获取音乐信息" />

2.接着,开始编写我们的MainActivity类,点击上述布局的按钮控件,把获取到的媒体信息显示在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声明文件添加下面的许可,即权限:

注:其中必须注意的是使用MediaMetadataRetriever类要求android的minSdkVersion最小为14,所以如果你的AndroidManifest.xml文件中的android:minSDKVersion="8"即最小的sdk版本小于14的话,将会报错,解决办法可以在AndroidManifest.xml文件中改最小sdk版本,也可以在MainActivity类中加上下面的代码:

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)使得我们使用这个MediaMetadataRetriever类不会报错。

四,部署此项目到Android模拟器上,运行效果如下:

0818b9ca8b590ca3270a3433284dd417.png

点击获取音乐信息按钮时,如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值