android如何通过path得到uri?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android如何通过path得到uri?相关的知识,希望对你有一定的参考价值。

比如/mnt/sdcard/0/pictures/pic0.png之类的Path如何转换成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);
参考技术A 你的方法没有错,这是标准的做法。返回的是小图。不过你可以在intent里加这样一句,设置大图保存路径:
intent.putextra(mediastore.extra_output, uri.fromfile(photofile));这样的话mybitmap应该就是null了。你可以试试是不是可以拿到uri。
参考技术B URI uri=new URI(path);
这样就可以了。
参考技术C Uri uri = Uri.parse(path);本回答被提问者采纳 参考技术D 真的不知道 不知道 不知道

java 从URI获取真实路径。字体:https://stackoverflow.com/questions/2789276/android-get-real-path-by-uri-getpath

private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = mContext.getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentURI.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

以上是关于android如何通过path得到uri?的主要内容,如果未能解决你的问题,请参考以下文章

Android 两个Activity之间怎样使用Uri传递图片,怎样获取图片的Uri,怎样通过Uri得到图片

Android获取数据库图片uri路径并用imageView显示

Android UriUriMatcherContentUris详解

Android开发工程师文集-Android知识点讲解

Android Uri 转 Path

Android:如何获取匹配缩略图 URI 的文件路径?