Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决
问题背景:
参考链接 做了一个图片浏览,用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完全扫描不到图片。但奇怪的是二种情况下都不会报异常。
查询的关键语句是:
- <span style="font-family:'Comic Sans MS';font-size:18px;"> 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();</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、每次查询前,应该发广播更新下:
- <span style="font-family:'Comic Sans MS';font-size:18px;"> private void updateGallery(){
- Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); //, MediaStore.Images.Media.EXTERNAL_CONTENT_URI
- String path = Environment.getExternalStorageDirectory() + "/DCIM/Camera";
- Uri uri = Uri.fromFile(new File(path));
- intent.setData(uri);
- this.sendBroadcast(intent);
- }</span>
在发广播处,可以指定path路径的uri,当然也可以传
- <span style="font-family:'Comic Sans MS';font-size:18px;"> MediaStore.Images.Media.EXTERNAL_CONTENT_URI</span>
。
Android4.4 ContentResolver查询图片无效 及 图库删除 增加图片后,ContentResolver不更新的问题解决的更多相关文章
- Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决
问题背景: 參考链接 做了一个图片浏览,用ContentResolver扫描图库照片.且严格依照时间拍摄顺序排好序显示在listview里.例如以下图所看到的: watermark/2/text/aH ...
- 周记4——vue中动态添加图片无效、build上线后background-image路径问题
又是一个周五,又一周要过去了...很开心,这周遇到了vue中的一个比较常见的坑,网上随便一搜就有了很多解决方案...“幸运”的是,我选了一个带坑的方案...所以我觉得有必要记录一下这个“坑中坑”... ...
- Android 如何从系统图库中选择图片
转:http://blog.csdn.net/tody_guo/article/details/7560270 这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如 ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
- 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】
iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- android 开发 实现一个进入相机拍照后裁剪图片或者进入相册选中裁剪图片的功能
实现思维路径: 以进入相机拍照的思维路线为例子: 1.进入app 2.判断之前是否保存头像,如果有就显示历史图像 (下面代码中在getOldAvatar();方法中执行这个逻辑) 3.点击更换图像的B ...
- 换主页轮播的主题图片(4、删除)---轻开电子商务系统(企业入门级B2C站点)
接( 换主页轮播的主题图片1 ) 文件:site/links/img0.html中的表单(第11行最后一个td) <td><if x="@{sys:canDo}" ...
- 图片处理:html文本获取图片Url,判断图片大小,存数据库
1.从html文本获取图片Url /** * html文本中取出url链接 */ public class Url { public static void main(String[] args) { ...
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
随机推荐
- 【转】classpath和环境变量设置
http://www.360doc.com/content/12/0722/14/820209_225797366.shtml 在没有设置环境变量之前,我们可以通过直接在应用程序中加带相关信息来运行我 ...
- centos7: ifconfig出现command not found解决办法
问题 说下我linux配置情况,不一样的可以选择借鉴我的办法. 在虚拟机中以最小化方式安装centos7,ifconfig命令无效,而且在sbin目录中没有ifconfig文件. 原因 这是因为cen ...
- ActiveMQ 概述
JMS Java Message Service (Java 消息服务), 类似于JDBC的作用. 1.Destination 目的地 2.Provider 生产者 3.Comsumer 消费者 4. ...
- Vue脚手架
https://cli.vuejs.org/zh/guide/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vu ...
- 从零开始学习html(十三) CSS代码缩写,占用更少的带宽
一.盒模型代码简写 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- HBuilder开发iPad程序不能全屏显示的解决方法
HBuilder开发iPad程序不能全屏显示的解决方法: targets选择HBuilder=>Deployment Info=> devices选择Universal即可
- Bootstrap源码分析系列之整体架构
作为一名合格的前端工程师,你肯定听说过Bootstarp框架.确实可以说Bootstrap框架是最流行的前端框架之一.可是也有人说Bootstrap是给后端和前端小白用的,我认为只要学习它能给我们前端 ...
- Oracle EBS FTP显示无法与某IP 连接
首先 用root用户登录 如果可以登录 那么应该是权限的问题 这里选择 方法二:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to ...
- SQLSERVER文件组误脱机后如何联机
场景:在学习文件组的恢复过程中,通过 ALTER DATABASE TEST MODIFY FILE(NAME = SUBF,OFFLINE) 把文件组给弄脱机了.这时却发现脱机之前忘记备份了. 这时 ...
- h5页面调用摄像头(简易版)
<input type="button" value="OpenVideo" id="btnOpenVideo" /> < ...