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 获取相册列表的实现源码
共95个文件
class:41个
java:18个
xml:15个
5星 · 超过95%的资源 需积分: 50 2.8k 下载量 38 浏览量
2015-03-09
18:33:19
上传
评论 76
收藏 1.32MB RAR 举报
温馨提示
该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。 该项目最大特色: 1、获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取。 2、使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的。同时,通过引用第三方jar可以有效解决OOM异常问题。 博文地址:http://blog.csdn.net/u010156024/article/details/44136543 欢迎访问!【握手】
资源推荐
资源详情
资源评论
收起资源包目录
ImageBrowse.rar (95个子文件)
ImageBrowse
AndroidManifest.xml 1KB
res
layout
selected_images_adapter_item.xml 455B
album_item_images.xml 2KB
sdcard.xml 2KB
album_item_images_item_view.xml 832B
item.xml 1KB
selected_images_grid.xml 2KB
ablums_adapter_item.xml 2KB
albums_gridview.xml 531B
drawable-ldpi
icon.png 2KB
drawable
item_press_bg.xml 338B
drawable-mdpi
icon.png 3KB
drawable-hdpi
album_default_loading_pic.png 5KB
icon.png 4KB
drawable-xhdpi
values
strings.xml 113B
colors.xml 111B
dimens.xml 148B
ids.xml 331B
proguard.cfg 1KB
src
android
apps
GridImage.java 7KB
SelectedTreeMap.java 430B
SquareLayout.java 1KB
LoadLoacalPhotoCursorTask.java 3KB
utils
PhotoUpAlbumHelper.java 8KB
bean
PhotoUpImageItem.java 686B
AlbumBean.java 439B
PhotoUpImageBucket.java 723B
activity
AlbumsActivity.java 2KB
SelectedImagesActivity.java 2KB
AlbumItemActivity.java 3KB
adapter
AlbumsAdapter.java 4KB
AlbumItemAdapter.java 3KB
SelectedImagesAdapter.java 3KB
ImageAdapter.java 2KB
ImageWorker.java 8KB
bin
classes
android
apps
R$color.class 380B
ImageWorker.class 5KB
BuildConfig.class 333B
GridImage$2.class 3KB
ImageAdapter.class 3KB
R.class 573B
GridImage$4.class 2KB
SelectedTreeMap.class 841B
GridImage$3.class 1KB
R$layout.class 676B
R$attr.class 322B
ImageAdapter$ViewHolder.class 472B
utils
PhotoUpAlbumHelper$GetAlbumList.class 365B
PhotoUpAlbumHelper.class 9KB
ImageWorker$LoadBitmapTask.class 4KB
LoadLoacalPhotoCursorTask$OnLoadPhotoCursor.class 444B
bean
AlbumBean.class 933B
PhotoUpImageBucket.class 1KB
PhotoUpImageItem.class 1005B
R$id.class 1KB
SquareLayout.class 1KB
R$string.class 380B
GridImage$1.class 2KB
activity
AlbumsActivity$1.class 1KB
AlbumsActivity.class 3KB
AlbumItemActivity$1.class 3KB
SelectedImagesActivity$1.class 1KB
AlbumItemActivity.class 3KB
AlbumsActivity$2.class 2KB
SelectedImagesActivity.class 3KB
adapter
AlbumsAdapter$Holder.class 617B
SelectedImagesAdapter.class 4KB
AlbumsAdapter.class 6KB
SelectedImagesAdapter$Holder.class 610B
AlbumItemAdapter.class 4KB
AlbumItemAdapter$Holder.class 627B
ImageWorker$AsyncDrawable.class 1KB
GridImage.class 7KB
R$dimen.class 413B
R$drawable.class 468B
LoadLoacalPhotoCursorTask.class 4KB
dexedLibs
universal-image-loader-1.8.6-with-sources-446d71e8f8d63df0e254547f218c64fe.jar 153KB
android-support-v13-f5fc6a7e55cc465f68ccd7c8ea09d3fd.jar 152KB
AndroidManifest.xml 1KB
res
crunch
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 2KB
drawable-hdpi
album_default_loading_pic.png 3KB
icon.png 4KB
jarlist.cache 120B
classes.dex 764KB
GridImage.apk 231KB
resources.ap_ 21KB
.classpath 475B
assets
project.properties 563B
.settings
org.eclipse.jdt.core.prefs 177B
libs
android-support-v13.jar 400KB
universal-image-loader-1.8.6-with-sources.jar 227KB
.project 845B
gen
android
apps
R.java 3KB
BuildConfig.java 154B
共 95 条
- 1
龙吟在天
- 粉丝: 564
- 资源: 74
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 351AN-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 346G-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 342P-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 3420-VB一款SOT23封装N-Channel场效应MOS管
- UDP原理详解和代码示例
- 3414-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 以下是一些大数据面试习题.pdf
- 3414-CMN3414-VB一款SOT23封装N-Channel场效应MOS管
- ASTM G154-2023 Practice for Operating Fluorescent Ultraviolet UV
- 小米智能摄像机 云台版2K 固件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页