在android中 我们常常会用到照片以此来上传图片 然后调用系统相册时 由于种种原因 而无法满足产品需求 ,此时 我们将会用到自定义相册 ,相册样式由产品UI决定,
而我们只需要获取相册信息 ,
在android中 图片都有存入一个数据库中 共享给我们使用
第一 : 我们可能需要拿到所有相册的文件夹名字及个数
ContentResolver cr = ContentResolver();
String selection = "0=0) group by (" + Media.BUCKET_DISPLAY_NAME;
String[] projection = { Media.BUCKET_DISPLAY_NAME , "count(*) as image_count" };
Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection, selection, null, Media._ID + " desc");
获取到文件夹名称和内容总数
将其放入一个集合中
veToFirst()){do{BucketDisplay bucketDisplay = new BucketDisplay();String bucketDisplayName = ColumnIndex(Media.BUCKET_DISPLAY_NAME));bucketDisplay.name = unt = ColumnIndex("image_count"));<pre name="code" class="java"><pre name="code" class="java"> //插入获取默认图代码<span style="font-family: Arial, Helvetica, sans-serif;"> /* 此处插入下面查询默认图标代码 */</span>
bucketDisplays.add(bucketDisplay);
}while (veToNext());
String[] defaltProjection = { Media._ID , Media.DATA };//获取文件夹默认图片信息
Cursor defaltCursor = cr.query(Media.EXTERNAL_CONTENT_URI, defaltProjection, Media.BUCKET_DISPLAY_NAME + "='" + bucketDisplayName + "'", null, Media._ID + " desc limit 1" );//默认图只要一个 所以只查询一个最新的veToFirst()){int _id = ColumnIndex(Media._ID));String bigPath = ColumnIndex(Media.DATA));//该路径为大图的路径 有时可能我们会去获取缩略图,所以需要查看缩略图//获得该图片缩略图String[] projectionThumb = { Thumbnails.DATA };Cursor cursorprojectionThumb = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projectionThumb, Thumbnails.IMAGE_ID + "=" +_id, null, null);//获取缩略图地址String path = null;veToFirst()){//存在缩略图path = ColumnIndex(Thumbnails.DATA));}if(cursorprojectionThumb != null){cursorprojectionThumb.close();}if(TextUtils.isEmpty(path)){//如果不存在缩略图path = bigPath;}bucketDisplay.firstUrl = path;}<pre name="code" class="java"> if(defaltCursor != null){defaltCursor.close();}
当你获取了所有文件夹的信息后 此时你就会显示你的图片信息 由于相册图片可能会很多 建议使用分页查询图片相册信息
//通过文件名称 获取图片信息列表
/*** 获取文件夹 及文件夹下的文件信息* @param bucketDisplayName 文件夹名字<pre name="code" class="java"> * @param id 为图片id <span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
public List<ImageInfo> getImagesByBucketDisplayName(String bucketDisplayName , int id){List<ImageInfo> imageInfos = new ArrayList<ImageInfo>();
ContentResolver cr = ContentResolver();String[] projection = { Media._ID , Media.DATA };String selection = null;if(TextUtils.isEmpty(ucketDisplayName)){
//没有传入文件夹名称 查询所有图片信息if(id > 0 ){selection = Media._ID + "<" + id;}}else{if(id > 0){selection = Media.BUCKET_DISPLAY_NAME + "='" + bucketDisplayName + "' and " + Media._ID + "<" + id;}else{selection = Media.BUCKET_DISPLAY_NAME + "='" + bucketDisplayName + "'";}}Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection, selection, null, Media._ID + " desc limit " + limit);veToFirst()){do{ImageInfo imageInfo = new ImageInfo();
//为图片信息对象int _id = ColumnIndex(Media._ID));imageInfo.setId(_id);//获得该图片缩略图 String[] projectionThumb = { Thumbnails.DATA };Cursor cursorprojectionThumb = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projectionThumb, Thumbnails.IMAGE_ID + "='" +_id+ "'", null, null);
String path = null;veToFirst()){
//存在缩略图path = ColumnIndex(Thumbnails.DATA));}
if(cursorprojectionThumb != null){cursorprojectionThumb.close();}
String bigPath = ColumnIndex(Media.DATA));if(TextUtils.isEmpty(path)){path = bigPath;}imageInfo.setPath(path);imageInfo.setBucketDisplayName(bucketDisplayName);imageInfo.setBigPath(bigPath);imageInfos.add(imageInfo);
}while (veToNext());}
if(cursor != null){cursor.close() ;
}
if(cr != null){cr = null ;
}
return imageInfos;}
拿到这些 你就可以 随意定义你的相册了
本文发布于:2024-01-28 08:29:54,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064018026117.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |