Android系統(tǒng)提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套數(shù)據(jù)庫表格,通過Content Provider的方式提供給用戶。當(dāng)手機(jī)開機(jī)或者有SD卡插拔等事件發(fā)生時,系統(tǒng)將會自動掃描SD卡和手機(jī)內(nèi)存上的媒體文件,如audio,video,圖片等,將相應(yīng)的信息放到定義好的數(shù)據(jù)庫表格中。在這個程序中,我們不需要關(guān)心如何去掃描手機(jī)中的文件,只要了解如何查詢和使用這些信息就可以了。 MediaStore中定義了一系列的數(shù)據(jù)表格,通過ContentResolver提供的查詢接口,我們可以得到各種需要的信息。下面我們重點介紹查詢SD卡上的音樂文件信息。 先來了解一下ContentResolver的查詢接口: Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); Uri:指明要查詢的數(shù)據(jù)庫名稱加上表的名稱,從MediaStore中我們可以找到相應(yīng)信息的參數(shù),具體請參考開發(fā)文檔。 Projection: 指定查詢數(shù)據(jù)庫表中的哪幾列,返回的游標(biāo)中將包括相應(yīng)的信息。Null則返回所有信息。 selection: 指定查詢條件 selectionArgs:參數(shù)selection里有 ?這個符號是,這里可以以實際值代替這個問號。如果selection這個沒有?的話,那么這個String數(shù)組可以為null。 SortOrder:指定查詢結(jié)果的排列順序 下面的命令將返回所有在外部存儲卡上的音樂文件的信息: Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 得到cursor后,我們可以調(diào)用Cursor的相關(guān)方法具體的音樂信息: 歌曲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.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 Int size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE)); |