メディア情報照会
3844 ワード
今日は画像情報を検索する方法を書いて、androidの中のすべてのメディア情報がandroidにデータベースに保存されていることを知りました.
AndroidシステムはSDCARDをロードするたびにSDCARDをスキャンしてsdcardのマルチメディア、ファイル情報などの情報をデータベースに保存します.
まず、データベースファイルに保存されているディレクトリ/data/data/comを見てみましょう.android.providers.Media/databases、このディレクトリにデータベースファイルがあります
データベースを開くとandroidが異なるデータ型で異なるテーブルに分かれており、image、video、auto_があります.metaなど.
Androidはデータベースをクエリーするのに良い方法を提供しています.
/*
*cursorを解析してデータを取得
*/
1、SDカードのすべてのサムネイルはMediaStoreを通じて使用できます.Images.Thumbnails.EXTERNAL_CONTENT_URIが手に入れる
2、MediaStore.Images.Media.EXTERNAL_CONTENT_元の画像を得るためにURI
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"))+"
"+ cursor.getString(cursor.getColumnIndex("_size"))
// +"
"+cursor.getString(cursor.getColumnIndex("_display_name"))+"
"+cursor.getString(cursor.getColumnIndex("mime_type"))
// +"
"+cursor.getString(cursor.getColumnIndex("title"))+"
"+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