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。

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时。例如以下图所看到的:

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

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

??

时间: 2024-11-01 13:48:14

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

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

一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类.大家能够自行查看. 1.MediaMetadataRetriever类概述:MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media fil

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

有时候我们开发的app须要方便用户简单登录.能够让用户使用自己的qq.微信.微博登录到我们自己开发的app. 今天就在这里总结一下怎样在自己的app中集成QQ授权登录获取用户信息的功能. 首先我们打开腾讯开发平台这个网页,点击---->移动应用---->创建应用,成功创建应用后.能够产生我们须要的App ID和App Key,例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6

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

本文使用Android Studio开发. 获取定位信息相对简单,我们只需要如下几步: 第一步,注册百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key 第二步,下载sdk,地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

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

1. 获取百度个人信息(使用Gson解析): 2. 代码案例: (1)工程一览图,如下: (2)activity_main.xml: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent

Android多媒体分析-通过MediaStore获取Audio信息

[java] view plaincopy public void getAlldata() { ContentResolver cr = getApplication().getContentResolver(); if (cr == null) { return; } // 获取所有歌曲 Cursor cursor = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audi

Android 中运行时权限获取联系人信息 Demo

代码比较简单... AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="club.seliote.readcontact"> <uses-permission android:n

【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库(转)

转载请注明出处: http://blog.csdn.net/zhaokaiqiang1992 今天一打开博客,发现一位朋友给我发了一封私信,请教下面的问题,所以特写此文章,为其解惑. 从这位朋友的提问中,我们需要了解下面的这些问题,才能给他很好的解答: (1)如何获取手机里所有歌曲的信息? (2)在歌曲文件发生改变,比如增删操作之后,如何及时的更新媒体库,从而获取到最新的歌曲信息? (3)在4.4版本之后,扫描sd卡,更新媒体库的操作发生变化了吗? 下面,我将就以上三个问题,进行解答. (1)如

Android学习笔记(37):用Configuration类获取和监听设备信息

Configuration类用于描述手机设备上的配置信息.有时候我们的app需要获取手机的系统信息,并根据手机的信息来调整我们的app,这时候我们就需要用到Configuration类. (1)获取Configuration对象 调用Activity的方法获取系统的Configuration对象: Configuration config = getResources().getConfiguration(); (2)获取设备系统信息 在获取了Configuration对象之后,直接访问Conf

android 获取手机信息工具类

package com.yqy.yqy_listviewheadview; import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log; /** * 获取手机信息工具类<br> * 内部已经封装了打印功能,仅仅须要把DEBUG參数改为true就可以<br> * 假设须要更换tag能够直接更改,默觉得KEZHUANG * * @author YQY