zoukankan      html  css  js  c++  java
  • 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, null, null, null,
     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(), null, null);
    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删除图片可以删除媒体库的信息和缩略图一并删除,不留痕迹,如果直接通过路径删除文件会删除不干净

    前两种方法获取的都是content开头的URI,还有一种file开头的URI,不知这两种有什么区别,望大神指教一二!

  • 相关阅读:
    Vue Bug
    Vue.js(一)
    Node.js简介
    对请求链接的URLEncode处理
    淘宝开放平台
    Java基础(一)
    计算机基础知识
    Unity中对象池的使用
    希尔排序算法
    插入排序算法
  • 原文地址:https://www.cnblogs.com/mytech-blog/p/3201549.html
Copyright © 2011-2022 走看看