一、代码实现
1.实体类
/** * 作者:张风捷特烈 * 时间:2018/4/18:11:36 * 邮箱:[email protected] * 说明:文件夹实体类 */public class FolderBean { /** * 当前文件夹路径 */ private String dir; /** * 当前文件夹第一个照片的路径 */ private String firstImgPath; /** * */ private String name; /** * 当前文件夹内图片数量 */ private int count; public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; String[] names = this.dir.split("/"); this.name = names[names.length - 1]; } public String getFirstImgPath() { return firstImgPath; } public void setFirstImgPath(String firstImgPath) { this.firstImgPath = firstImgPath; } public String getName() { return name; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } @Override public String toString() { return "FolderBean{" + "dir='" + dir + '\'' + ", firstImgPath='" + firstImgPath + '\'' + ", name='" + name + '\'' + ", count=" + count + '}'; }
2.获得所有图片路径的封装方法
/** * 作者:张风捷特烈 * 时间:2018/4/14:10:15 * 邮箱:[email protected] * 说明:获取手机,联系人工具类 */public class PhoneUtils_Picture { /** * 最大图片数量的文件夹图片数 */ public static int mMaxCount = 0; /** * 最大图片数量的文件夹 */ public static File mMaxCountDir = null; //////////////////////////获取手机的图片/////////////////////////////////// public static List<FolderBean> getAllImagePath(Context ctx) { List<FolderBean> mFolderBeans = new ArrayList<>(); //[1]查询获得游标:content://media/external/images/media Uri mIngUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver resolver = ctx.getContentResolver(); Cursor cursor = resolver.query(mIngUri, null, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED); //[2]通过游标获取path,创建folderBean对象并赋值 //[2-1]为避免重复扫描,将dirPath放入HashSet集合 Set<String> mDirPaths = new HashSet<>(); while (cursor.moveToNext()) { //获取数据库中图片路径:/storage/emulated/0/DCIM/Camera/IMG20160501152640.jpg String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); //获取父目录:/storage/emulated/0/DCIM/Camera File parentFile = new File(path).getParentFile(); //没有父目录,跳出本次循环 if (parentFile == null) continue; //声明实体对象 FolderBean folderBean; //父目录的绝对路径:/storage/emulated/0/DCIM/Camera String dirPath = parentFile.getAbsolutePath(); if (mDirPaths.contains(dirPath)) { continue;//集合中有这个目录 跳出本次循环 } else {//集合中没有这个目录 //加入集合 mDirPaths.add(dirPath); //创建实体对象 folderBean = new FolderBean(); //父文件夹设置到folderBean folderBean.setDir(dirPath); //第一张图片路径设置到folderBean folderBean.setFirstImgPath(path); } if (parentFile.list() != null) { //根据父文件夹,过滤出所有以jpg,png,jpeg结尾的文件的数量 int imgCount = parentFile.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".jpg") || name.endsWith(".png") || name.endsWith(".jpeg"); } }).length; if (mMaxCount <= imgCount) { mMaxCount = imgCount; mMaxCountDir = parentFile; } //设置文件夹下图片的数量 folderBean.setCount(imgCount); //加入集合 mFolderBeans.add(folderBean); } } cursor.close(); return mFolderBeans; } }
3.使用:
注意:查询数据库是耗时操作,为了不阻塞主线程,最好新建个线程操作
new Thread(new Runnable() { @Override public void run() { List<FolderBean> allImagePath = PhoneUtils_Picture.getAllImagePath(MainActivity.this); System.out.println( PhoneUtils_Picture.mMaxCountDir+ "文件夹图片数最多,有" + PhoneUtils_Picture.mMaxCount+"张"); for (FolderBean folderBean : allImagePath) { System.out.println(folderBean); } } }).start();
4.结果:
图片.png
作者:张风捷特烈
链接:https://www.jianshu.com/p/137a41078a5f
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦