1. 程式人生 > >Android之使用MediaMetadataRetriever類獲取媒體信息

Android之使用MediaMetadataRetriever類獲取媒體信息

ren sym wid cte pad () 許可 card med

一.昨天。介紹了使用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時。例如以下圖所看到的:

技術分享

這樣媒體信息將獲取出來了,當中有些媒體信息沒有的,將為空。



五.以上內容僅供大家學習參考。寫得不好。請見諒。如有錯誤,請指出,謝謝!

??

Android之使用MediaMetadataRetriever類獲取媒體信息