问题背景:

参考链接 做了一个图片浏览,用ContentResolver扫描图库照片,且严格按照时间拍摄顺序排好序显示在listview里。如下图所示:

遇到的问题是在4.2的手机上能正常显示,但是新增了照片,这个扫描依旧么变化。实在是恼火。另一个严重的问题是,在4.4的手机上,一张图片都跑不起来。大爷的,真是坑爹到家了。浪费我好几个小时,后来几乎要放弃了,无意中浏览自己以前写的博客,才发现真正的原因是少了一个权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

需要有以下两个权限,才能在发广播更新时起到作用。尤其是第二个权限,没这个权限在4.2的手机上可以浏览但不会更新,在4.4完全扫描不到图片。但奇怪的是二种情况下都不会报异常。

查询的关键语句是:

  1. <span style="font-family:'Comic Sans MS';font-size:18px;">              Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  2. Log.i("yanguoqi", "mImageUri = " + mImageUri.getPath());
  3. ContentResolver mContentResolver = MainActivity.this.getContentResolver();
  4. //只查询jpeg的图片
  5. Cursor mCursor = mContentResolver.query(mImageUri, null,
  6. MediaStore.Images.Media.MIME_TYPE + "=?",
  7. new String[] { "image/jpeg"}, MediaStore.Images.Media.DATE_TAKEN);
  8. mCursor.moveToLast();
  9. int num = mCursor.getCount();
  10. do{
  11. //获取图片的路径
  12. String path = mCursor.getString(mCursor
  13. .getColumnIndex(MediaStore.Images.Media.DATA));
  14. if(path.contains("/DCIM/Camera")){
  15. imgPaths.add(path);
  16. }
  17. }while (mCursor.moveToPrevious());
  18. mCursor.close();</span>

1、查询时mContentResolver.query(mImageUri。。。)这个uri只能填写Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;构造出来的URI。而不能随便写个路径构造个URI,这块着实诡异;

2、所以为了过滤,只能扫描后通过if(path.contains("/DCIM/Camera"))这句话来过滤图库下面的文件;

3.为了实现严格按照拍照时间排序,光在查询里写MediaStore.Images.Media.DATE_TAKEN还不中,这么写查出来的cursor第一个确实是最新的,但是通过List.add操作,反而把第一个排到最后了。因此我先将cursor移动最后,之所以do在前面while在后,是为了不漏掉第一个图片。

4、每次查询前,应该发广播更新下:

  1. <span style="font-family:'Comic Sans MS';font-size:18px;">  private void updateGallery(){
  2. Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);   //, MediaStore.Images.Media.EXTERNAL_CONTENT_URI
  3. String path = Environment.getExternalStorageDirectory() + "/DCIM/Camera";
  4. Uri uri = Uri.fromFile(new File(path));
  5. intent.setData(uri);
  6. this.sendBroadcast(intent);
  7. }</span>

在发广播处,可以指定path路径的uri,当然也可以传

  1. <span style="font-family:'Comic Sans MS';font-size:18px;"> MediaStore.Images.Media.EXTERNAL_CONTENT_URI</span>

Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决的更多相关文章

  1. Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决

    问题背景: 參考链接 做了一个图片浏览,用ContentResolver扫描图库照片.且严格依照时间拍摄顺序排好序显示在listview里.例如以下图所看到的: watermark/2/text/aH ...

  2. 周记4——vue中动态添加图片无效、build上线后background-image路径问题

    又是一个周五,又一周要过去了...很开心,这周遇到了vue中的一个比较常见的坑,网上随便一搜就有了很多解决方案...“幸运”的是,我选了一个带坑的方案...所以我觉得有必要记录一下这个“坑中坑”... ...

  3. Android 如何从系统图库中选择图片

    转:http://blog.csdn.net/tody_guo/article/details/7560270 这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如 ...

  4. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...

  5. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  6. android 开发 实现一个进入相机拍照后裁剪图片或者进入相册选中裁剪图片的功能

    实现思维路径: 以进入相机拍照的思维路线为例子: 1.进入app 2.判断之前是否保存头像,如果有就显示历史图像 (下面代码中在getOldAvatar();方法中执行这个逻辑) 3.点击更换图像的B ...

  7. 换主页轮播的主题图片(4、删除)---轻开电子商务系统(企业入门级B2C站点)

    接(  换主页轮播的主题图片1 ) 文件:site/links/img0.html中的表单(第11行最后一个td) <td><if x="@{sys:canDo}" ...

  8. 图片处理:html文本获取图片Url,判断图片大小,存数据库

    1.从html文本获取图片Url /** * html文本中取出url链接 */ public class Url { public static void main(String[] args) { ...

  9. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

随机推荐

  1. 机器人数目-2015决赛Java语言C组第一题

    标题:机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中,A类含有:8个轮子,1个传感器B类含有: 6个轮子,3个传感器C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子6 ...

  2. JVM 堆内存和非堆内存

    转载自:http://www.importnew.com/27645.html 堆和非堆内存 按照官方的说法:“Java 虚拟机具有一个堆(Heap),堆是运行时数据区域,所有类实例和数组的内存均从此 ...

  3. Donsen法则

    “专才”对越来越少的事物了解得越来越多,直到最后他对不存在的事物无所不知: 然而,“通才”对越来越多的事物了解得越来越少,直到他对一切事物一无所知.

  4. POJ2195&&HDU1533(KB11-D 最小费用最大流)

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23515   Accepted: 11853 Desc ...

  5. python-责任链模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 当你作为一名coder已经快三十却还还没有女朋友,家中父母已经着急万分,此时要求 ...

  6. apicloud 自定义模块的开发与上架注意事项

    模块开发要点与返回刷新页面注意事项 1.介绍 apicloud 除了使用官方提供的模块外,我们可以自定义一些模块供自己使用和上传到官方出售.针对没有提供或者价格过贵的模块,如果有时间自己可以进行研究. ...

  7. Vue.js之路由系统

    Vue.js生态之vue-router vue-router是什么? vue-router是Vue的路由系统,定位资源的,我们可以不进行整页刷新去切换页面内容. vue-router的安装与基本配置 ...

  8. sass在vue注意的地方

    当用@import导入vue页面的时候,在sass/scss文件里面的url,路径开始就是导入的vue位置. 当前目录结构 App.vue 我在App.vue导入了public.scss,那在publ ...

  9. Maven学习(四)eclipse创建maven项目

    eclipse创建Maven web项目 1.创建新项目 选择File -> New ->Project 选择New Project窗口中选择 Maven -> Maven Proj ...

  10. PostGIS安装

    PostGIS安装 1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/win ...