Android之使用MediaMetadataRetriever類獲取媒體信息
??1.當中用到了MediaMetadataRetriever類的無參構造函數:MediaMetadataRetriever()
2.當中用到了MediaMetadataRetriever類的一些經常用法:setDataSource(String path)或者其他參數的setDataSource()方法。以及返回字符串的extractMetadata
註:這裏的extractMetadata(int keyCode)方法中的keyCode參數能夠由MediaMetadataRetriever類的常量來得到,比如MediaMetadataRetriever.METADATA_KEY_ALBUM。
3.當中用到了MediaMetadataRetriever類的常量,這裏我僅僅附上一部分常量的圖:
剩余的常量大家能夠自行查看API文檔,也能夠通過 http://android.toolib.net/reference/android/media/MediaMetadataRetriever.html 這個鏈接來查看,上述常量都是用在setDataSource方法之後的,然後通過extractMetadata
二.接下來附上一個小樣例,在編寫這個樣例之前,要做以下三個步驟:
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類獲取媒體信息