android如何通过path得到uri?
比如/mnt/sdcard/0/pictures/pic0.png之类的Path如何转换成uri?(指的是算法)...
比如/mnt/sdcard/0/pictures/pic0.png之类的Path如何转换成uri?(指的是算法)
展开
5个回答
2015-07-11 · 知道合伙人软件行家
关注
展开全部
最近做项目要通过图片的绝对路径找到图片的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);
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);
展开全部
你的方法没有错,这是标准的做法。返回的是小图。不过你可以在intent里加这样一句,设置大图保存路径:
intent.putextra(mediastore.extra_output, uri.fromfile(photofile));这样的话mybitmap应该就是null了。你可以试试是不是可以拿到uri。
intent.putextra(mediastore.extra_output, uri.fromfile(photofile));这样的话mybitmap应该就是null了。你可以试试是不是可以拿到uri。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
URI uri=new URI(path);
这样就可以了。
这样就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Uri uri = Uri.parse(path);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |