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

问题背景:

參考链接?做了一个图片浏览,用ContentResolver扫描图库照片。且严格依照时间拍摄顺序排好序显示在listview里。例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuemkxMjI1NjI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

遇到的问题是在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_URI
		String 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

原文地址:https://www.cnblogs.com/mqxnongmin/p/10658139.html

时间: 2024-11-07 01:20:55

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

图片上传-下载-删除等图片管理的若干经验总结

图片上传功能很常见,很多人都觉得这个功能很简单,随着要求的提高,这个图片小系统也真是复杂啊. 需求1: 上传,未了达到"大容量存储"."负载均衡"."性能好","有技术含量"等装逼需求,采用了Fastdfs. 注:FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理. 功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题. 特别适合以文件为载体的在线服务,如相册网站.视频

图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案

这次完整地介绍图片上传的完整解决方案,如有bug,后续再补充. 一.图片表 CREATE TABLE `photo` ( `id` bigint(10) unsigned NOT NULL AUTO_INCREMENT, `bizid` bigint(11) NOT NULL DEFAULT '-1' COMMENT '业务id,比如项目的id', `cover` int(11) DEFAULT '0' COMMENT '1:是,0:不是', `sort` int(11) DEFAULT '0'

图片上传-下载-删除等图片管理的若干经验总结2

今天再次思考了下图片上传,觉得昨天的有个细节存在问题. 昨天在码代码的时候,没有去考虑删除临时文件的问题.今天,想增加删除临时文件,发现昨天的代码就有问题了. 上次提到: class PhotoBean { //将要删除的,通常是数据库中的 public List<Photo> toDelete; //将要更新的,都在数据库中,部分最新内容来源于web前端 public List<Photo> toUpdate; //将要增加的,由于上传图片的时候都已经插入了,这个时候可以忽略了

一个字符串多个图片进行截取替换并添加图片宽度

<?php header("Content-type:text/html;charset=utf-8"); $str = 'asdfasdfasdf<img src="http://192.168.7.182:8083/File/upload/2015/0109/14/54af75cebaa20.jpg" >ffggfsdasdfasdfasdfasdfasdfsadfasdf<img src="http://192.168.7.1

C#如何在PDF文件添加图片印章

文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述如何以编程的方式在PDF文件中添加图片印章. 具体步骤如下: 在此之前,我们需要添加dll文件作为引用.添加引用 → 浏览 → Spire.XLS folder → Bin → .NET 2.0/3.5/4.0/4.5/4.0 ClientProfile → Spire.XLS.dll. 第一步:首

iOS UILable 文字添加图片 (文字前面,中间,后面添加图)

1,实例化一个UILable 2, // 创建一个富文本 NSMutableAttributedString *attri =     [[NSMutableAttributedString alloc] initWithString:@"超时罚款24元/小时"]; NSTextAttachment *attch = [[NSTextAttachment alloc] init]; // 表情图片 attch.image = [UIImage imageNamed:@"par

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

这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片. 首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择图片来做一些事.例如,在Facebook的App,你就可以直接选择手机上的图片上传到你的个人资料. 让我们来做一个简单例子,要求: 屏幕上显示一个按钮和图片视图控件. 点击"载入图片"按钮,将用户重定向到Android的图片库,在那里可以选择一个图片. 一旦图片被选中,图片将在主屏幕上的图片视图

Jmeter数据库正常连接,可以正常查询数据,但是当条件为汉字是查询条件无效返回数据为空;

Jmeter数据库正常连接,可以正常查询数据,但是当条件为汉字是查询条件无效: 需要在连接配置的Database URL中添加&characterEncoding=utf-8即可: 原文地址:https://www.cnblogs.com/cjy-blog/p/10213621.html

点击手机图库图片来获取到点击的图片

在学习安卓期间,都是通过写死一个url来获取一个图片,但是如何实现在没有图片url的情况下通过点击图片来获取url呢,这个问题一直困扰着笔者,今天有时间查阅网上大量资料,经过反复测试终于成功了,现将代码分享如下.由于笔者能力有限,错误之处在所难免,欢迎大家不吝指正,如本篇文章触犯了您的利益,请联系本人.谢谢! 环境:Android Studio+Genymotion 01.布局: <?xml version="1.0" encoding="utf-8"?>