亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

3-AIV--使用ContentProvider獲得所有圖片路徑

標簽:
Java

一、代码实现

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.结果:

webp

图片.png



作者:张风捷特烈
链接:https://www.jianshu.com/p/137a41078a5f


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消