媒体信息查询
今天写了一个查询图片信息的方法,才知道android中的所有媒体信息都被android保存到数据库里了。
android系统每次加载SDCARD的时候都会扫描SDCARD把sdcard中的多媒体,文件信息等等信息保存在数据库中。
我们先看一下数据库文件保存的目录/data/data/com.android.providers.media/databases,在这个目录里有一个数据库文件
打开数据库,就可以看到android按着不同的数据类型给我们分成了不同的表,有image、video、auto_meta等等。
android为我们提供了很好的方法查询数据库:
ContentResolver myResolver=this.context.getContentResolver(); Cursor cursor=myResolver.query(uri, projection, selection, selectionArgs, sortOrder); 示例代码: /** * 根据文件名查看图像信息,返回查询结果,包括文件路径、大小、文件名、类型、标题(文件名无扩展名)、父文件名 * @param display_name 文件名 例:pic.png * @return 如果查询结果为空则返回null,否则返回一个ArrayList<Map<String,String>>类型数据,Map键名依次为date、size、display_name、mime_type、title、bucket_display,也可以直接使用常量ConstantFactory.ImageAbout.DATE等。 * */ public ArrayList<Map<String,String>> getImageInformationForDisplayName(String display_name){ ContentResolver myResolver=this.context.getContentResolver(); Cursor cursor=myResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, "_display_name=?", new String[]{display_name}, null); if(cursor.getCount()==0){ return null; } cursor.moveToFirst(); ArrayList<Map<String,String>> list=new ArrayList<Map<String,String>>(); Map<String, String> map=resolutionCursor(cursor); for(int i=0;i<cursor.getCount();i++){ map=resolutionCursor(cursor); list.add(map); cursor.moveToNext(); } return list; }
/*
*解析cursor获得其中数据
*/
private Map<String, String> resolutionCursor(Cursor cursor){ Map<String, String> map =new HashMap<String, String>(); // cursor.moveToPosition(23); // this.string=cursor.getColumnNames(); // for(int i=0;i<string.length;i++){ // System.out.println(string[i]); // //System.out.println(cursor.getColumnIndex(string[i])); // System.out.println(""+cursor.getString(cursor.getColumnIndex(string[i]))); // } // // System.out.println(""+cursor.getString(cursor.getColumnIndex("_data"))+"\n"+ cursor.getString(cursor.getColumnIndex("_size")) // +"\n"+cursor.getString(cursor.getColumnIndex("_display_name"))+"\n"+cursor.getString(cursor.getColumnIndex("mime_type")) // +"\n"+cursor.getString(cursor.getColumnIndex("title"))+"\n"+cursor.getString(cursor.getColumnIndex("bucket_display_name"))); //具体的文件地址/sdcard/tencent/MobileQQ/head/511079108.png map.put(ConstantFactory.ImageAbout.DATA, cursor.getString(cursor.getColumnIndex("_data"))); //文件大小 map.put(ConstantFactory.ImageAbout.SIZE, cursor.getString(cursor.getColumnIndex("_size"))); //文件名称(包含扩展名) map.put(ConstantFactory.ImageAbout.DISPLAY_NAME, cursor.getString(cursor.getColumnIndex("_display_name"))); //文件类型 map.put(ConstantFactory.ImageAbout.MIME_TYPE, cursor.getString(cursor.getColumnIndex("mime_type"))); //文件标题(文件名没有标题) map.put(ConstantFactory.ImageAbout.TITLE, cursor.getString(cursor.getColumnIndex("title"))); //父文件夹名 map.put(ConstantFactory.ImageAbout.BUCKET_DISPLAY, cursor.getString(cursor.getColumnIndex("bucket_display_name"))); return map; }
1、SD卡中的所有缩略图可以通过MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI来得到
2、MediaStore.Images.Media.EXTERNAL_CONTENT_URI来得到原始图片
相关推荐
zbcaicai 2020-05-26
姚强 2020-02-14
wintershii 2020-01-18
whyname 2019-12-23
sunshunli 2012-07-11
Arthur 2011-01-18
bigdatazx 2010-11-05
luoj 2011-08-23
happinessaflower 2011-08-12
fuzhangpeng 2011-08-09
LiLiLiLaLa 2011-06-11
sunshunli 2013-12-31
longhushi 2013-12-29
airfling 2011-10-27
bigdatazx 2011-09-22
tsolin 2015-03-18
一夜长风 2015-03-18
sunsi00 2012-01-31