零、前言
[1].顾名思义,内容提供者,目的:实现跨进程间数据共享 [2].基于数据库提供数据 [3].如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取 [4].如果只是想使用的人,直接把静态方法拷贝即可,想知道原理的,图片和注释认真看一下,也可以自己分析一下联系人的表。 [5].本文只打印一下查询结果:RecycleView篇将会界面展示数据,Xml篇将会介绍备份到本地
一、代码实现
1.实体类
/**
* 作者:张风捷特烈
* 时间:2018/4/18:11:36
* 邮箱:1981462002@qq.com
* 说明:文件夹实体类
*/
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
* 邮箱:1981462002@qq.com
* 说明:获取手机,联系人工具类
*/
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
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明 [2]欢迎广大编程爱好者共同交流 [3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 [4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 简书首发,腾讯云+社区同步更新张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002 邮箱:1981462002@qq.com 微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg
转载于:https://www.cnblogs.com/toly-top/p/9781933.html
相关资源:宇电S026-05-02 AIV7.0人工智能工业调节器使用说明书.pdf