android系统通过图片绝对路径获取URI的三种方法

老马的技术博客

android系统通过图片绝对路径获取URI的三种方法

最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在

android 4.1.3的系统上都是可用的。

 

1.将所有的图片路径取出,遍历比较找到需要的路径,取出URI,效率较低

其中 MediaStore.MediaColumns.DATA 字段存的就是图片的绝对路径,

最后mImageUri得到的就是图片的URI

1 Uri mUri = Uri.parse("content://media/external/images/media");

 2 Uri mImageUri = null;

 3 Cursor cursor = managedQuery(

 4                                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, nullnullnull,

 5                                MediaStore.Images.Media.DEFAULT_SORT_ORDER);

 6 cursor.moveToFirst();

 7 

 8 while (!cursor.isAfterLast()) {

 9                         String data = cursor.getString(cursor

10                                        .getColumnIndex(MediaStore.MediaColumns.DATA));

11                         if (picPath.equals(data)) {

12                                 int ringtoneID = cursor.getInt(cursor

13                                                .getColumnIndex(MediaStore.MediaColumns._ID));

14                                 mImageUri = Uri.withAppendedPath(mUri, "" + ringtoneID);

15                                 break;

16                        }

17                        cursor.moveToNext();

18 }

 

2.直接从媒体数据库根据字段取出相应的记录,效率较高

1 //TYLT: add by duanyf 20121027 start

 2                 String type = Utils.ensureNotNull(intent.getType());

 3                 Log.d(TAG, "uri is " + uri);

 4                 if (uri.getScheme().equals("file") && (type.contains("image/"))) {

 5                     String path = uri.getEncodedPath();

 6                     Log.d(TAG, "path1 is " + path);

 7                     if (path != null) {

 8                         path = Uri.decode(path);

 9                         Log.d(TAG, "path2 is " + path);

10                         ContentResolver cr = this.getContentResolver();

11                         StringBuffer buff = new StringBuffer();

12                         buff.append("(")

13                                .append(Images.ImageColumns.DATA)

14                                 .append("=")

15                                 .append("'" + path + "'")

16                                 .append(")");

17                         Cursor cur = cr.query(

18                                Images.Media.EXTERNAL_CONTENT_URI,

19                                 new String[] { Images.ImageColumns._ID },

20                                 buff.toString(), nullnull);

21                         int index = 0;

22                         for (cur.moveToFirst(); !cur.isAfterLast(); cur

23                                .moveToNext()) {

24                             index = cur.getColumnIndex(Images.ImageColumns._ID);

25                             // set _id value

26                             index = cur.getInt(index);

27                        }

28                         if (index == 0) {

29                             //do nothing

30                         } else {

31                             Uri uri_temp = Uri

32                                     .parse("content://media/external/images/media/"

33                                             + index);

34                             Log.d(TAG, "uri_temp is " + uri_temp);

35                             if (uri_temp != null) {

36                                 uri = uri_temp;

37                            }

38                        }

39                    }

40                }

41                 //TYLT: add by duanyf 20121027 end

 

3.直接根据路径通过 ContentProvider 的 delete() 方法删除图片,两行代码搞定,效率最高

1 String params[] = new String[]{filepath};

2 ctx.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.DATA + " LIKE ?", params);

 

PS:通过URI删除图片可以删除媒体库的信息和缩略图一并删除,不留痕迹,如果直接通过路径删除文件会删除不干净

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值