android搜尋本地媒體庫中的音樂檔案
阿新 • • 發佈:2019-01-25
建立一個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())));
}