android搜索本地媒体库中的音乐文件

本文介绍了如何在Android平台上搜索并获取本地媒体库中的音乐文件信息,通过创建一个Bean来存储音乐的相关元数据。

建立一个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()))); 
     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值