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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用ContentResolver查询照片的信息,可以使用以下代码实现: ```java String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATE_TAKEN }; String selection = MediaStore.Images.Media.DATE_TAKEN + ">=?"; String[] selectionArgs = new String[]{String.valueOf(getStartOfDayInMilliSeconds(2023, 5, 1))}; String sortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC"; Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, sortOrder); if (cursor != null) { while (cursor.moveToNext()) { // 处理每张照片的信息,比如获取照片ID、名称、拍摄时间等 long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID)); String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); long dateTaken = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)); // 处理照片信息 } cursor.close(); } ``` 其中,`getStartOfDayInMilliSeconds()`函数可以用于获取指定日期的零点时间的时间戳(单位:毫秒),代码如下: ```java private long getStartOfDayInMilliSeconds(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, day, 0, 0, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } ``` 这样,您就可以通过ContentResolver查询从2023-05-01到今天的所有照片的信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值