Android 通过ContentResolver获取系统所有的相册--组成自己的相册管理app

一、迈出第一步

首先我们要能够获取到相册

因此我们需要先手动获取一张图片

https://blog.csdn.net/dream_miracle/article/details/82179044

在上面这篇文章里面讲述了 在获取一张图片时所遇到的动态权限等问题

二、实现自动获取全部相册

显然通过intent去获取到图片,和我们的出发点违背了

但是每个人的系统相册位置不同,该如何获取

第一反应想到的是去扫描所有的本机文件带有image/jpg等标志的,这和目标有点靠近了

因此,第一反应是使用ContentResolver,来看一下ContentResolver的解释:

因此ContentResolver负责获取程序之间共享的数据并进行修改/添加/删除更新数据等操作;

所以我们可以通过以下代码对系统中的相册进行查询,ContentResolver为我们返回了一个Couser集

Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// 获得图片
Cursor mCursor = contentResolver.query(mImageUri, null,
        MediaStore.Images.Media.MIME_TYPE + "=? or "
                + MediaStore.Images.Media.MIME_TYPE + "=?",
        new String[] { "image/jpeg", "image/png" },MediaStore.Images.Media.DATE_MODIFIED);

MediaStore.Images//获取到图片的信息

MediaStore.Images.Media.EXTERNAL_CONTENT_URI//获取到external下的图片文件的uri信息

三、显示工作

通过循环出Cursor里面的信息并展示

while (mCursor.moveToNext()){
    String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));// 路径 imageView.setImageURI(Uri.parse(path));
}

但是值得注意的是,本地系统里面的相册太多,直接加载会造成OOM,

因此建议将图片进行压缩,或者引入Glide图片加载框架

最后,附上源码地址QAQ

https://github.com/huangbaolian/PicManager

猜你喜欢

转载自blog.csdn.net/dream_miracle/article/details/82253943