一.昨天。介绍了使用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" > <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模拟器上,执行效果例如以下:

点击获取音乐信息button时。例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

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

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



Android之使用MediaMetadataRetriever类获取媒体信息的更多相关文章

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

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

  2. GStreamer基础教程06 - 获取媒体信息

    摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件.通常称这些数据为元数据(Metadata:data that provides information a ...

  3. Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息

    由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...

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

    在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获取定位信息,包括用户所在的纬度.经度.高度.方向.移动速度等.代码如下: Activity ...

  5. android使用百度地图SDK获取定位信息

    本文使用Android Studio开发. 获取定位信息相对简单.我们仅仅须要例如以下几步: 第一步,注冊百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:titl ...

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

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

  7. Android实现自动定位城市并获取天气信息

    定位实现代码: <span style="font-size:14px;">import java.io.IOException; import java.util.L ...

  8. 【Android Developers Training】 39. 获取文件信息

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)

    1. 获取百度个人信息(使用Gson解析): 2. 代码案例: (1)工程一览图,如下: (2)activity_main.xml: <LinearLayout xmlns:android=&q ...

随机推荐

  1. python 3---if判断成绩练习

    需求根据用户输入的成绩分档,要求如下: 1. 如果成绩大于60分,输出"及格"2. 如果成绩大于70分,输出"良"3. 如果成绩大于80分,输出"好& ...

  2. JavaScript系列----正则表达式

    1.正则表达式 1.1.正则表达式的类型 正则表达式在JavaScript中,提供了一种内置的构造函数--RegExp. 正则表达式有三种匹配模式: g: 表示全局模式,即模式应用于所有的字符串,而非 ...

  3. 前端html 中jQuery实现对文本的搜索并把搜索相关内容显示出来

    做项目的时候有这么一个需求,客户信息显示出来后我要搜索查找相关的客户,并把相关的客户信息全部显示出来,因为一个客户全部信息我写在一个div里面  所以显示的时候就是显示整个div.先看看实现的效果: ...

  4. 30.Linux-RTC驱动分析及使用

    linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 1.进入./drivers/rtc/r ...

  5. Python手动实现k-means

    import numpy as np import matplotlib.pyplot as plt def kmeans(data, cluster_num, method='mean'): poi ...

  6. Eclipse的几个常用快捷键

    键盘操作 功能 Alt + /    语句或变量名自动补全 Ctrl + Shift + F 语句格式化 Ctrl + / 单行注释(或取消单行注释) Ctrl + Shift + /   多行注释 ...

  7. intel服务器cpu命名规则

    我们以E3.E5.E7系列进行一个详细解析.首先,Intel E3.E5.E7代表了3个不同档次的至强CPU,至强"E系列"的这种命名方式有些类似桌面上的Core i3,i5,i7 ...

  8. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  9. webpack 3.X学习之图片处理

    CSS中图片处理 在src目录下新建一个images目录,把图片放入images文件夹中:在index.html文件中增加一个div标签: /src/index.html: <div id=&q ...

  10. Akka(40): Http:Marshalling reviewed - 传输数据序列化重温

    上篇我们讨论了Akka-http的文件交换.由于文件内容编码和传输线上数据表达型式皆为bytes,所以可以直接把文件内容存进HttpEntity中进行传递.那么对于在内存里自定义的高级数据类型则应该需 ...