先來了解一下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));
歌曲的名稱 :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));
歌曲的總播放時長 :MediaStore.Audio.Media.DURATION
Int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
歌曲文件的大小 :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);
}