Android MediaStore详解


MediaStore这个类是  android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频 ,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了

MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。下面我们重点介绍查询SD卡上的音乐文件信息。
  先来了解一下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));  
播放音频就是通过这个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));  
路径转为URI用 Uri.fromFile(new File(url));
  
歌曲的总播放时长 :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)); 

还有一些其他的 看代码吧. 
	// 获取歌曲详细信息
		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);
		}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章