android如何通过path得到uri?

比如/mnt/sdcard/0/pictures/pic0.png之类的Path如何转换成uri?(指的是算法)... 比如/mnt/sdcard/0/pictures/pic0.png之类的Path如何转换成uri?(指的是算法) 展开
 我来答
爱问hill
2015-07-11 · 知道合伙人软件行家
爱问hill
知道合伙人软件行家
采纳数:2186 获赞数:15507
毕业于苏州大学人力资源管理专业,本科学位。2年IT行业从业经验,致力于互联网中开启自己人生的一番天地。

向TA提问 私信TA
展开全部
  最近做项目要通过图片的绝对路径找到图片的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);
艾载黄绿竹
2020-05-06 · TA获得超过1173个赞
知道小有建树答主
回答量:1407
采纳率:100%
帮助的人:6.2万
展开全部
你的方法没有错,这是标准的做法。返回的是小图。不过你可以在intent里加这样一句,设置大图保存路径:
intent.putextra(mediastore.extra_output, uri.fromfile(photofile));这样的话mybitmap应该就是null了。你可以试试是不是可以拿到uri。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无月的天很蓝
2015-06-25 · TA获得超过1779个赞
知道大有可为答主
回答量:2551
采纳率:44%
帮助的人:1261万
展开全部
URI uri=new URI(path);
这样就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JulioHu706
2014-05-05 · TA获得超过653个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:427万
展开全部
Uri uri = Uri.parse(path);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
summer雨之恋
2014-05-05
知道答主
回答量:2
采纳率:0%
帮助的人:2701
展开全部
真的不知道 不知道 不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式