package android.apps.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.apps.bean.PhotoUpImageBucket;
import android.apps.bean.PhotoUpImageItem;
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;
public class PhotoUpAlbumHelper extends AsyncTask<Object, Object, Object>{
final String TAG = getClass().getSimpleName();
Context context;
ContentResolver cr;
// 缩略图列表
HashMap<String, String> thumbnailList = new HashMap<String, String>();
// 专辑列表
List<HashMap<String, String>> albumList = new ArrayList<HashMap<String, String>>();
HashMap<String, PhotoUpImageBucket> bucketList = new HashMap<String, PhotoUpImageBucket>();
private GetAlbumList getAlbumList;
private PhotoUpAlbumHelper() {}
public static PhotoUpAlbumHelper getHelper() {
PhotoUpAlbumHelper instance = new PhotoUpAlbumHelper();
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()) {
// 获取指定列的索引
int photoIDIndex = cur.getColumnIndexOrThrow(Media._ID);
int photoPathIndex = cur.getColumnIndexOrThrow(Media.DATA);
int bucketDisplayNameIndex = cur.getColumnIndexOrThrow(Media.BUCKET_DISPLAY_NAME);
int bucketIdIndex = cur.getColumnIndexOrThrow(Media.BUCKET_ID);
/**
* Description:这里增加了一个判断:判断照片的名字是否合法,例如.jpg .png 图片名字是不合法的,直接过滤掉
*/
do {
if (cur.getString(photoPathIndex).substring(
cur.getString(photoPathIndex).lastIndexOf("/")+1,
cur.getString(photoPathIndex).lastIndexOf("."))
.replaceAll(" ", "").length()<=0)
{
Log.d(TAG, "出现了异常图片的地址:cur.getString(photoPathIndex)="+cur.getString(photoPathIndex));
Log.d(TAG, "出现了异常图片的地址:cur.getString(photoPathIndex).substring="+cur.getString(photoPathIndex)
.substring(cur.getString(photoPathIndex).lastIndexOf("/")+1,cur.getString(photoPathIndex).lastIndexOf(".")));
}else {
String _id = cur.getString(photoIDIndex);
String path = cur.getString(photoPathIndex);
String bucketName = cur.getString(bucketDisplayNameIndex);
String bucketId = cur.getString(bucketIdIndex);
PhotoUpImageBucket bucket = bucketList.get(bucketId);
if (bucket == null) {
bucket = new PhotoUpImageBucket();
bucketList.put(bucketId, bucket);
bucket.imageList = new ArrayList<PhotoUpImageItem>();
bucket.bucketName = bucketName;
}
bucket.count++;
PhotoUpImageItem imageItem = new PhotoUpImageItem();
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<PhotoUpImageBucket> getImagesBucketList(boolean refresh) {
if (refresh || (!refresh && !hasBuildImagesBucketList)) {
buildImagesBucketList();
}
List<PhotoUpImageBucket> tmpList = new ArrayList<PhotoUpImageBucket>();
Iterator<Entry<String, PhotoUpImageBucket>> itr = bucketList.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry<String, PhotoUpImageBucket> entry = (Map.Entry<String, PhotoUpImageBucket>) 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<PhotoUpImageBucket> list);
}
@Override
protected Object doInBac
没有合适的资源?快使用搜索试试~ 我知道了~
android 获取相册列表的实现源码

身份认证 购VIP最低享 7 折!

该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。 该项目最大特色: 1、获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取。 2、使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的。同时,通过引用第三方jar可以有效解决OOM异常问题。 博文地址:http://blog.csdn.net/u010156024/article/details/44136543 欢迎访问!【握手】
资源推荐
资源详情
资源评论









龙吟在天
- 粉丝: 559
- 资源: 79

上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助

相关资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
- 5
- 6
前往页