ContentResolver
访问系统数据库表,里面有文件的信息,在同一个文件夹的,就表示在一个相册,并且归结为一类
package com.example.administrator.iphoto.helper; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.os.AsyncTask; import android.provider.MediaStore.Audio.Albums; import android.provider.MediaStore.Images.Media; import android.provider.MediaStore.Images.Thumbnails; import android.util.Log; import com.example.administrator.iphoto.model.ImageBucket; import com.example.administrator.iphoto.model.ImageItem; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class AlbumHelper extends AsyncTask<Object, Object, Object> { final String TAG = getClass().getSimpleName(); Context context; ContentResolver cr; // 缩略图列表 HashMap<String, String> thumbnailList = new HashMap<String, String>(); // 专辑列表Q List<HashMap<String, String>> albumList = new ArrayList<HashMap<String, String>>(); HashMap<String, ImageBucket> bucketList = new HashMap<String, ImageBucket>(); private GetAlbumList getAlbumList; private AlbumHelper() {} public static AlbumHelper getHelper() { AlbumHelper instance = new AlbumHelper(); return instance; } /** * 初始化 * @param context */ public void init(Context context) { if (this.context == null) { this.context = context; cr = context.getContentResolver(); } } /** * 得到缩略图 */ private void getThumbnail() { String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID, Thumbnails.DATA}; Cursor cursor1 = Thumbnails.queryMiniThumbnails(cr, Thumbnails.EXTERNAL_CONTENT_URI, Thumbnails.MINI_KIND, projection); getThumbnailColumnData(cursor1); cursor1.close(); } /** * 从数据库中得到缩略图 * @param cur */ private void getThumbnailColumnData(Cursor cur) { if (cur.moveToFirst()) { int image_id; String image_path; int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID); int dataColumn = cur.getColumnIndex(Thumbnails.DATA); do { image_id = cur.getInt(image_idColumn); image_path = cur.getString(dataColumn); thumbnailList.put("" + image_id, image_path); } while (cur.moveToNext()); } } /** * 得到原图-n */ void getAlbum() { String[] projection = { Albums._ID, Albums.ALBUM, Albums.ALBUM_ART, Albums.ALBUM_KEY, Albums.ARTIST, Albums.NUMBER_OF_SONGS }; Cursor cursor1 = cr.query(Albums.EXTERNAL_CONTENT_URI, projection, null, null, Albums.ALBUM_ID+" desc"); getAlbumColumnData(cursor1); cursor1.close(); } /** * 从本地数据库中得到原图 * @param cur */ private void getAlbumColumnData(Cursor cur) { if (cur.moveToFirst()) { int _id; String album; String albumArt; String albumKey; String artist; int numOfSongs; int _idColumn = cur.getColumnIndex(Albums._ID); int albumColumn = cur.getColumnIndex(Albums.ALBUM); int albumArtColumn = cur.getColumnIndex(Albums.ALBUM_ART); int albumKeyColumn = cur.getColumnIndex(Albums.ALBUM_KEY); int artistColumn = cur.getColumnIndex(Albums.ARTIST); int numOfSongsColumn = cur.getColumnIndex(Albums.NUMBER_OF_SONGS); do { _id = cur.getInt(_idColumn); album = cur.getString(albumColumn); albumArt = cur.getString(albumArtColumn); albumKey = cur.getString(albumKeyColumn); artist = cur.getString(artistColumn); numOfSongs = cur.getInt(numOfSongsColumn); HashMap<String, String> hash = new HashMap<String, String>(); hash.put("_id", _id + ""); hash.put("album", album); hash.put("albumArt", albumArt); hash.put("albumKey", albumKey); hash.put("artist", artist); hash.put("numOfSongs", numOfSongs + ""); albumList.add(hash); } while (cur.moveToNext()); } } /** * 是否创建了图片集 */ boolean hasBuildImagesBucketList = false; /** * 得到图片集 */ void buildImagesBucketList() { // 构造缩略图索引 getThumbnail(); // 构造相册索引 String columns[] = new String[] { Media._ID, Media.BUCKET_ID, Media.PICASA_ID, Media.DATA, Media.DISPLAY_NAME, Media.TITLE, Media.SIZE, Media.BUCKET_DISPLAY_NAME }; // 得到一个游标 Cursor cur = cr.query(Media.EXTERNAL_CONTENT_URI, columns, null, null, Media.DATE_MODIFIED+" desc"); if (cur.moveToFirst()) { // 获取指定列的索引,注意Media是Image Media,获取到的当然是图片资源 int photoIDIndex = cur.getColumnIndexOrThrow(Media._ID);//文件ID int photoPathIndex = cur.getColumnIndexOrThrow(Media.DATA);//文件路径 int bucketDisplayNameIndex = cur.getColumnIndexOrThrow(Media.BUCKET_DISPLAY_NAME);//文件所在文件夹名称 int bucketIdIndex = cur.getColumnIndexOrThrow(Media.BUCKET_ID);//文件所在文件夹ID /** * Description:这里增加了一个判断:判断照片的名字是否合法,例如.jpg .png 图片名字是不合法的,直接过滤掉 */ String aa = cur.getString(photoPathIndex); do { String _id = cur.getString(photoIDIndex); String path = cur.getString(photoPathIndex); String bucketName = cur.getString(bucketDisplayNameIndex); String bucketId = cur.getString(bucketIdIndex); ImageBucket bucket = bucketList.get(bucketId); if (bucket == null) { bucket = new ImageBucket(); bucketList.put(bucketId, bucket); bucket.imageList = new ArrayList<ImageItem>(); bucket.bucketName = bucketName; } bucket.count++; ImageItem imageItem = new ImageItem(); imageItem.setImageId(_id); imageItem.setImagePath(path); // imageItem.setThumbnailPath(thumbnailList.get(_id)); bucket.imageList.add(imageItem); Log.i(TAG, "PhotoUpAlbumHelper类中 的——》path="+thumbnailList.get(_id)); } while (cur.moveToNext()); } cur.close(); hasBuildImagesBucketList = true; } /** * 得到图片集 * @param refresh * @return */ public List<ImageBucket> getImagesBucketList(boolean refresh) { if (refresh || (!refresh && !hasBuildImagesBucketList)) { buildImagesBucketList(); } List<ImageBucket> tmpList = new ArrayList<ImageBucket>(); Iterator<Map.Entry<String, ImageBucket>> itr = bucketList.entrySet().iterator(); while (itr.hasNext()) { Map.Entry<String, ImageBucket> entry = (Map.Entry<String, ImageBucket>) itr .next(); tmpList.add(entry.getValue()); } return tmpList; } /** * 得到原始图像路径 * @param image_id * @return */ String getOriginalImagePath(String image_id) { String path = null; Log.i(TAG, "---(^o^)----" + image_id); String[] projection = { Media._ID, Media.DATA }; Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection, Media._ID + "=" + image_id, null, Media.DATE_MODIFIED+" desc"); if (cursor != null) { cursor.moveToFirst(); path = cursor.getString(cursor.getColumnIndex(Media.DATA)); } return path; } public void destoryList() { thumbnailList.clear(); thumbnailList = null; albumList.clear(); albumList = null; bucketList.clear(); bucketList = null; } public void setGetAlbumList(GetAlbumList getAlbumList) { this.getAlbumList = getAlbumList; } public interface GetAlbumList{ public void getAlbumList(List<ImageBucket> list); } @Override protected Object doInBackground(Object... params) { return getImagesBucketList((Boolean)(params[0])); } @SuppressWarnings("unchecked") @Override protected void onPostExecute(Object result) { super.onPostExecute(result); getAlbumList.getAlbumList((List<ImageBucket>)result); } }参考地址:http://blog.csdn.net/u010156024/article/details/44136543