編輯:關於Android編程
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控件,代碼如下:
2.接著,開始編寫我們的MainActivity類,點擊上述布局的按鈕控件,把獲取到的媒體信息顯示在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聲明文件添加下面的許可,即權限:
注:其中必須注意的是使用MediaMetadataRetriever類要求android的minSdkVersion最小為14,所以如果你的AndroidManifest.xml文件中的android:minSDKVersion=8即最小的sdk版本小於14的話,將會報錯,解決辦法可以在AndroidManifest.xml文件中改最小sdk版本,也可以在MainActivity類中加上下面的代碼:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)使得我們使用這個MediaMetadataRetriever類不會報錯。
四,部署此項目到Android模擬器上,運行效果如下:
點擊獲取音樂信息按鈕時,如下圖所示:
這樣媒體信息將獲取出來了,其中有些媒體信息沒有的,將為空。
我們畫常規圖形時一般用word上面自帶的插件或visio畫圖。但是我在畫linux內核文件系統結構圖、內存分配以及學習數據結構樹、圖時,發現使用Graphviz非常的方便
本demo是《Android智能穿戴設備開發指南》書中的一塊內容,實現了兩台手機基於藍牙進行即時通訊的功能。demo演示如下:結構圖主要代碼MainActivity:啟動
ListView實現的列表,如果是可編輯,可刪除的,一般都要提供批量刪除功能,否則的話,一項一項的刪除體驗很不好,也給用戶帶來了很大的麻煩。 實現效果圖 具體實
前言當前的網絡開源庫有許多,如volley,okhttp,retrofit等,這三個庫當前是比較火的,其中,okhttp和retrofit由square團隊開發。關於這三