Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决
来源:互联网 发布:java socket保持心跳 编辑:程序博客网 时间:2024/05/21 12:44
问题背景:
参考链接 做了一个图片浏览,用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完全扫描不到图片。但奇怪的是二种情况下都不会报异常。
查询的关键语句是:
Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;Log.i("yanguoqi", "mImageUri = " + mImageUri.getPath());ContentResolver mContentResolver = MainActivity.this.getContentResolver();//只查询jpeg的图片Cursor mCursor = mContentResolver.query(mImageUri, null,MediaStore.Images.Media.MIME_TYPE + "=?",new String[] { "image/jpeg"}, MediaStore.Images.Media.DATE_TAKEN);mCursor.moveToLast();int num = mCursor.getCount(); do{//获取图片的路径String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));if(path.contains("/DCIM/Camera")){imgPaths.add(path);}}while (mCursor.moveToPrevious());mCursor.close();
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、每次查询前,应该发广播更新下:
private void updateGallery(){Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); //, MediaStore.Images.Media.EXTERNAL_CONTENT_URIString path = Environment.getExternalStorageDirectory() + "/DCIM/Camera"; Uri uri = Uri.fromFile(new File(path)); intent.setData(uri); this.sendBroadcast(intent); }
在发广播处,可以指定path路径的uri,当然也可以传
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
。
- Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决
- 使用ContentResolver获取手机所有图片及删除操作
- Moto 525 图库图片删除不掉问题解决
- ContentResolver().query的分组查询
- ContentResolver
- ContentResolver
- ContentResolver
- ContentResolver
- ContentResolver
- ContentResolver
- ContentResolver
- android4.4从系统图库无法加载图片的问题
- android4.4从系统图库无法加载图片的问题
- Android4.4从图库选择图片返回的路径不正确
- android4.4从系统图库无法加载图片的问题
- Android4.4系统从图库选择图片
- android中的ContentResolver获取手机本地图片
- ContentResolver获取图片与获取视频
- Hibernate4+Spring4关于getCurrentSession与openSession
- uva--100 - The 3n + 1 problem
- Android下用Media Player实现一个最简单的视频播放器
- 线程
- 黑马程序员——流程控制
- Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决
- Android Launcher源码分析(二)
- css插入样式表
- 读书笔记:《C#并行编程高级教程》-第三章:命令式任务并行
- github 使用总结
- leetcode之Reverse Words in a String
- Effective C++:条款09:绝不在构造和析构过程中调用virtual函数
- 一个人的旅行 (HDU 2066)
- 数据结构-链表