メディア情報照会

3844 ワード

今日は画像情報を検索する方法を書いて、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"))+"
"+ 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