Android MediaStore詳解


MediaStore這個類是  android系統提供的一個多媒體數據庫,android中多媒體信息都可以從這裏提取。這個MediaStore包括了多媒體數據庫的所有信息,包括音頻 ,視頻和圖像,android把所有的多媒體數據庫接口進行了封裝,所有的數據庫不用自己進行創建,直接調用利用ContentResolver去掉用那些封裝好的接口就可以進行數據庫的操作了

MediaStore中定義了一系列的數據表格,通過ContentResolver提供的查詢接口,我們可以得到各種需要的信息。下面我們重點介紹查詢SD卡上的音樂文件信息。
  先來了解一下ContentResolver的查詢接口:
Cursor  query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
        Uri:指明要查詢的數據庫名稱加上表的名稱,從MediaStore中我們可以找到相應信息的參數,具體請參考開發文檔。 
        Projection: 指定查詢數據庫表中的哪幾列,返回的遊標中將包括相應的信息。Null則返回所有信息。
        selection: 指定查詢條件
        selectionArgs:參數selection裏有 ?這個符號是,這裏可以以實際值代替這個問號。如果selection這個沒有?的話,那麼這個String數組可以爲null。
        SortOrder:指定查詢結果的排列順序
下面的命令將返回所有在外部存儲卡上的音樂文件的信息:
[code]Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,  
                null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  [/code]
得到cursor後,我們可以調用Cursor的相關方法具體的音樂信息:

歌曲ID:MediaStore.Audio.Media._ID 
Int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));  
播放音頻就是通過這個ID來索引
  
歌曲的名稱 :MediaStore.Audio.Media.TITLE
String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
  
歌曲的專輯名:MediaStore.Audio.Media.ALBUM 
String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));  
  
  
歌曲的歌手名: MediaStore.Audio.Media.ARTIST 
String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));  
  
歌曲文件的路徑 :MediaStore.Audio.Media.DATA 
String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));  
路徑轉爲URI用 Uri.fromFile(new File(url));
  
歌曲的總播放時長 :MediaStore.Audio.Media.DURATION
Int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));  
  
歌曲文件的大小 :MediaStore.Audio.Media.SIZE 
Int size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE)); 

還有一些其他的 看代碼吧. 
	// 獲取歌曲詳細信息
		String[] colums = {
				MediaStore.Audio.Media.DATA,// 歌曲文件的路徑
				MediaStore.Audio.Media._ID,// 歌曲ID
				MediaStore.Audio.Media.TITLE,// 歌曲標題
				MediaStore.Audio.Media.DISPLAY_NAME,// 歌曲名稱
				MediaStore.Audio.Media.MIME_TYPE,// 歌曲的播放格式
				MediaStore.Audio.Media.ARTIST,// 歌曲的歌手名
				MediaStore.Audio.Media.ALBUM,// 歌曲的唱片集
				MediaStore.Audio.Media.IS_RINGTONE,//
				MediaStore.Audio.Media.IS_ALARM,// 歌曲的專輯名
				MediaStore.Audio.Media.IS_MUSIC,//
				MediaStore.Audio.Media.IS_NOTIFICATION,//
				MediaStore.Audio.Media.DURATION // 歌曲的總播放時長
		};

		// 調用 managedQuery()來查詢MediaStore
		@SuppressWarnings("deprecation")
		Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
				colums, null, null, null);

		// 獲得索引
		int fileColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
		int titleColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
		int displayColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME);
		int mimeTypeColumn = cursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);

		// moveToFirst() 獲得返回的第一個結果
		if (cursor.moveToFirst()) {
			String audioFilePath = cursor.getString(fileColumn);// 路徑
			String mimeType = cursor.getString(mimeTypeColumn);// mime類型
			// 獲取mime之後就可以用意圖啓動內置的音頻播放器 或者用MediaPlayer播放

			// 構造一個file對象並調用Uri.fromFile來獲取Uri

			Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
			File newFile = new File(audioFilePath);
			intent.setDataAndType(Uri.fromFile(newFile), mimeType);
			startActivity(intent);
		}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章