1. 程式人生 > >android搜尋本地媒體庫中的音樂檔案

android搜尋本地媒體庫中的音樂檔案

建立一個bean來儲存音樂資訊

public class MediaEntity implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	public int id; //id標識
	public String title; // 顯示名稱
	public String display_name; // 檔名稱
	public String path; // 音樂檔案的路徑
	public int duration; // 媒體播放總時間
	public String albums; // 專輯
	public String artist; // 藝術家 
	public String singer; //歌手 
	public long size;
	
}

通過ContentResolver獲取音樂列表
public static List<MediaEntity> getAllMediaList(Context context, String selection) {
		Cursor cursor = null;
		List<MediaEntity> mediaList = new ArrayList<MediaEntity>();
		try {
			cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
					new String[] {	
					MediaStore.Audio.Media._ID,
					MediaStore.Audio.Media.TITLE,
					MediaStore.Audio.Media.DISPLAY_NAME,
					MediaStore.Audio.Media.DURATION,
					MediaStore.Audio.Media.ARTIST,
					MediaStore.Audio.Media.DATA,
					MediaStore.Audio.Media.SIZE},
					selection, null, MediaStore.Audio.Media.DATE_ADDED + " DESC");
			if(cursor == null) {
				Log.d(TAG, "The getMediaList cursor is null.");
				return mediaList;
			}
			int count= cursor.getCount();
			if(count <= 0) {
				Log.d(TAG, "The getMediaList cursor count is 0.");
				return mediaList;
			}
			mediaList = new ArrayList<MediaEntity>();
			MediaEntity mediaEntity = null;
//			String[] columns = cursor.getColumnNames(); 
			while (cursor.moveToNext()) {
				mediaEntity = new MediaEntity();
				mediaEntity.id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
				mediaEntity.title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
				mediaEntity.display_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
				mediaEntity.duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
				mediaEntity.size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
				mediaEntity.durationStr = longToStrTime(mediaEntity.duration);
				
				if(!checkIsMusic(mediaEntity.duration, mediaEntity.size)) {
					continue;
				}
				mediaEntity.artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
				mediaEntity.path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
				mediaList.add(mediaEntity);
			}
		} catch (Exception e) {
			
		} finally {
			if(cursor != null) {
				cursor.close();
			}
		}
		return mediaList;
	}

 /**
	 * 根據時間和大小,來判斷所篩選的media 是否為音樂檔案,具體規則為篩選小於30秒和1m一下的
	 */
	public static boolean checkIsMusic(int time, long size) {
		if(time <= 0 || size <= 0) {
			return  false;
		}
		
		time /= 1000;
		int minute = time / 60;
	//	int hour = minute / 60;
		int second = time % 60;
		minute %= 60;
		if(minute <= 0 && second <= 30) {
			return  false;
		}
		if(size <= 1024 * 1024){
			return false;
		}
		return true;
	}

檢查sd卡上的媒體檔案
private void scanSdCard(){
        sendBroadcast(new Intent(/*Intent.ACTION_MEDIA_SCANNER_SCAN_FILE*/Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()))); 
     }