android如何通过path得到uri

android如何通过path得到uri,第1张

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

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

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

其中 MediaStoreMediaColumnsDATA 字段存的就是的绝对路径,

最后mImageUri得到的就是的URI

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

2 Uri mImageUri = null;

3 Cursor cursor = managedQuery(

4 MediaStoreImagesMediaEXTERNAL_CONTENT_URI, null, null, null,

5 MediaStoreImagesMediaDEFAULT_SORT_ORDER);

6 cursormoveToFirst();

7

8 while (!cursorisAfterLast()) {

9 String data = cursorgetString(cursor

10 getColumnIndex(MediaStoreMediaColumnsDATA));

11 if (picPathequals(data)) {

12 int ringtoneID = cursorgetInt(cursor

13 getColumnIndex(MediaStoreMediaColumns_ID));

14 mImageUri = UriwithAppendedPath(mUri, "" + ringtoneID);

15 break;

16 }

17 cursormoveToNext();

18 }

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

1 //TYLT: add by duanyf 20121027 start

2 String type = UtilsensureNotNull(intentgetType());

3 Logd(TAG, "uri is " + uri);

4 if (urigetScheme()equals("file") && (typecontains("image/")))

{

5 String path = urigetEncodedPath();

6 Logd(TAG, "path1 is " + path);

7 if (path != null) {

8 path = Uridecode(path);

9 Logd(TAG, "path2 is " + path);

10 ContentResolver cr = thisgetContentResolver();

11 StringBuffer buff = new StringBuffer();

12 buffappend("(")

13 append(ImagesImageColumnsDATA)

14 append("=")

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

16 append(")");

17 Cursor cur = crquery(

18 ImagesMediaEXTERNAL_CONTENT_URI,

19 new String[] { ImagesImageColumns_ID },

20 bufftoString(), null, null);

21 int index = 0;

22 for (curmoveToFirst(); !curisAfterLast(); cur

23 moveToNext()) {

24 index = curgetColumnIndex(ImagesImageColumns_ID);

25 // set _id value

26 index = curgetInt(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 Logd(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

ctxgetContentResolver()delete(MediaStoreImagesMediaEXTERNAL_CONTENT_URI,

MediaStoreImagesMediaDATA + " LIKE ", params);

ContentResolver resolver = getContentResolver();

Cursor cursor = resolverquery(originalUri, proj, null, null, null);

// 按我个人理解 这个是获得用户选择的的索引值

int column_index = cursorgetColumnIndexOrThrow(MediaStoreImagesMediaDATA);

// 将光标移至开头 ,这个很重要,不小心很容易引起越界

cursormoveToFirst();

// 最后根据索引值获取路径

String path = cursorgetString(column_index);

这样就获得了的路径。

下面说上传,现在一般上传都用Ok>

调用android系统的裁剪方式问题和解决方式:

如果你的程序中使用的裁剪方式是这样子的话:

1、调用系统自带的裁剪页面,吧保存在inetnt中;

2、裁剪完毕通过intentData取出

如果使用这种方式,就会遇到一个问题:

在某些手机(本人遇到的情况是小米3)上面无法跳转到系统的裁剪页面,或者IntentData是null。

这种方式是把放在intent中传递,而intent在安卓中的定义是传递轻量级的数据,显然传递是不合适的,高性能的手机可能没问题,性能差点的手机就会出问题了。、

解决方式:

1、用intent传递的Uri:

private staticUrimUriFile;

2、裁剪完毕通过Uri取出:

这里要注意取的方式,小心oom。把规避oom的方式也贴出来:

Android调用系统拍照的代码:

创建Intent Intent openCameraIntent = new Intent(MediaStoreACTION_IMAGE_CAPTURE);

String imagePath = EnvironmentgetExternalStorageDirectory() + "/image" ;

设置文件路径 File file = new File(imagePath);

if(!fileexists()){

filemkdirs(); }

设置URI,指定相册拍照后保存的路径,Uri imageUri = UrifromFile(new File(imagePath, "imagejsp"));

openCameraIntentputExtra(MediaStoreEXTRA_OUTPUT, imageUri);

startActivityForResult(openCameraIntent, REQUEST_CODE_TAKING_PICTURES);

拍照完以后,文件就会保存在这个指定的目录下了。Uri 里指定了相机拍照的路径。

以上就是关于android如何通过path得到uri全部的内容,包括:android如何通过path得到uri、android:怎样将Uri类型的图片数据转换成流、调用android系统的图片裁剪方式问题和解决方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9725799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存