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

问题背景:

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

9eb2ad537b4335a06761b9fb0716f4f0.png

遇到的问题是在4.2的手机上能正常显示,可是新增了照片,这个扫描依然么变化。实在是恼火。还有一个严重的问题是,在4.4的手机上,一张图片都跑不起来。

大爷的,真是坑爹到家了。浪费我好几个小时。后来差点儿要放弃了,无意中浏览自己曾经写的博客,才发现真正的原因是少了一个权限。

须要有以下两个权限。才干在发广播更新时起到作用。

尤其是第二个权限。没这个权限在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值