zoukankan      html  css  js  c++  java
  • 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时。例如以下图所看到的:


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



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

    
  • 相关阅读:
    隐藏滚动条但可用滚动
    封装axios,带请求头和响应头
    文本超出显示...
    设置vue-quill-editor禁止输入或编辑
    element-ui select多选情况下获取label和value
    处理vue-quill-editor回显数据的时候没有空格问题
    Redis学习之路(二)Redis集群搭建
    redis requires Ruby version >= 2.2.2问题
    Redis学习之路(一)Redis简介
    Logstash学习之路(五)使用Logstash抽取mysql数据到kakfa
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6931643.html
Copyright © 2011-2022 走看看