一.昨天,介绍了使用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。

3.其中用到了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小例子了,项目名为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" ><TextViewandroid:id="@+id/ablum"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="哈哈"android:textSize="20sp" /><TextViewandroid:id="@+id/artist"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="哦哦"android:textSize="20sp" /><TextViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="嗯嗯"android:textSize="20sp" /><TextViewandroid:id="@+id/mimetype"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="嘿嘿"android:textSize="20sp" /><TextViewandroid:id="@+id/duration"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="呃呃"android:textSize="20sp" /><TextViewandroid:id="@+id/bitrate"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="啊啊"android:textSize="20sp" /><TextViewandroid:id="@+id/date"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:text="噢噢"android:textSize="20sp" /> <Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="获取音乐信息" /></LinearLayout>

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对象ablumprivate TextView artist;//声明TextView对象ablum_artistprivate TextView title;//声明TextView对象titleprivate TextView mimetype;//声明TextView对象mimetypeprivate TextView duration;//声明TextView对象durationprivate TextView bitrate;//声明TextView对象bitrateprivate TextView date;//声明TextView对象dateprivate Button button;//声明Button对象button@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubMediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象mmrFile file=new File("/storage/sdcard/Music/music1.mp3");//实例化File对象file,指定文件路径为/storage/sdcard/Music/music1.mp3mmr.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类获取媒体信息相关推荐

  1. Android之使用MediaMetadataRetriever类获取视频第一帧

    一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类,大家可以 ...

  2. sdk数值与android版本,Android SdkVersion的区别及获取版本信息方法

    1.minSdkVersion,targetSdkVersion,maxSdkVersion,compileSdkVersion四个数值之间有什么区别? • minSdkVersion,maxSdkV ...

  3. Android 打开 GPS 导航并获取位置信息

    原文地址为: Android 打开 GPS 导航并获取位置信息 最近在做一个 Android 项目,需要用到GPS获取位置信息,从 API 查了一下,发现获取位置信息仅需极其简单的一句即可: getL ...

  4. Android Build类获取设备信息

    前言 因为项目中经常会遇到要上传一系列设备信息的功能,为了方便使用,所以就拆分成以下系列文章来单独介绍如何获取各类设备信息 手机运营商获取 AndroidID.IMEI.OAID获取 地理位置信息经纬 ...

  5. android 选择文件路径无效,Android使用MediaMetadataRetriever类获取视频帧时一直无法正确读取路径文件,iamge显示位null...

    满意答案 来欧冠0300 2017.04.23 采纳率:57%    等级:8 已帮助:211人 从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了 ...

  6. android使用高德地图SDK获取定位信息

    注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...

  7. Android GPS应用:动态获取位置信息

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获 ...

  8. 【Android笔记 二】Location获取地理位置信息(上)

    2011 7 22暑假实训的第五天,跟大家分享以下我对Android location的学习吧,这是一个最基本的获取地理位置信息的入门,下一次给大家介绍更质能化的地理位置选择Criteria,今天就先 ...

  9. Android之QQ授权登录获取用户信息

    有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq.微信.微博登录到我们自己开发的app. 今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能. 首先我们打开 ...

最新文章

  1. JavaScript数据类型
  2. bzoj 1468 Tree(点分治模板)
  3. Ext grid 根据行号获取行数据
  4. 图像处理相关知识(不断更新)
  5. 芜湖计算机专业哪个学校最好,芜湖IT行业那么火,到底哪些人适合学IT呢?
  6. 如何利用Google谷歌浏览器来查看GET或POST请求以及传递的数据
  7. DenseNet翻译:Densely Connected Convolutional Networks
  8. 2022-2027年中国民办高校行业市场调研及未来发展趋势预测报告
  9. 计算机软件行业绩效,关于软件行业的绩效考核.doc
  10. mos管的rc吸收电路计算_RC吸收电路参数计算
  11. Cartographer(二)使用思岚rplidar雷达进行cartographer建图
  12. ubuntu安装原生迅雷,让下载成为简单
  13. 【SpringBoot实战】分布式定时任务锁Shedlock
  14. MTK Combo Chip常用调试命令
  15. 由pytorch中的super().__init__到python中的测试
  16. 配置路由urlconf
  17. 《未来简史(下)》万维钢解读
  18. 2022最新oneNav导航系统源码全开源版本下载总裁导航
  19. lisp 调用opendcl_OpenDCL官方版
  20. 脱掉360奇虎的“加固保”壳后的发现与你的微信安全

热门文章

  1. Git-根据tag创建分支
  2. Python 金融数据可视化(两列数据的提取//分别画//双坐标轴//双图//两种不同的图)...
  3. Sublime 格式化代码 快捷键以及插件使用
  4. WPF:动态显示或隐藏Listview的某一列
  5. 使用Task简化Silverlight调用Wcf
  6. 回调机制在 Android 监听用户界面操作中的体现
  7. 2012,新的一年,新的开始
  8. GitHub in vs2010、vs2013
  9. 采用随机的'User-Agent'提高博客的访问量
  10. 7-1 输出从1加到N的和 (9 分)