android选择图片得到实际路径的总结


项目中有个需求,通过拍照或者选取系统图片后,显示到控件上,并且要得到图片的实际路径。

自己用的是华为手机,4.0系统。发现选取图片,有2个不同的选项,分别是“图库”和“文件管理”,如下图所示



1、通过系统拍照,得到的uri地址是

 file:///mnt/sdcard/DCIM/camera/faceImage.JPEG

2、通过文件管理器,得到的uri地址是

file:///mnt/sdcard/20140724181622520977.jpg

3、通过图库,得到的图片uri地址是

 content://media/external/images/media/888737

我们发现,得到图片的地址有2种类型,以file开头和content开头的,但是以content开头的 ,没有路径,只有图片编号的uri.这就导致接下来无法根据图片实际路径,

所以需要要一个方法,把content的变成实际真实文件路径,加上一个方法如下即可

private String getRealPathFromURI(Uri contentUri) { //传入图片uri地址
	    String[] proj = { MediaStore.Images.Media.DATA };
	    CursorLoader loader = new CursorLoader(getActivity(), contentUri, proj, null, null, null);
	    Cursor cursor = loader.loadInBackground();
	    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
	    cursor.moveToFirst();
	    return cursor.getString(column_index);
	}
前后的结果如下,可以看到我们通过这个方法得到了图片的真实路径



总结,在获取图片路径时候,要先判断uri字符串是否包含 content ,如果有的话,就要转换。如果以file开头的,就不管它

	       String textPre=uri.toString();//得到图片uri地址字符串
		//图片文件的路径 ,有2种格式
		//华为手机从图库选择的结果 ,以content开头
		//content://media/external/images/media/888737
		
		//华为手机从文件选择器的结果,或者系统拍照也是如下的结果,以file开头
              //  file:///mnt/sdcard2/%E7%A8%8B%E5%BA%8F%E5%91%98%E6%97%A5%E5%B8%B8.jpg

		System.out.println("转换前的地址是 :   "+textPre);
		
		if(uri.toString().contains("content://")){ //如果包含有content开头,需要转化为其实际路径,不能用content开头
			 text=getRealPathFromURI(uri);
		}else{
			text=textPre;       //如果用file开头,不用转化
		}
		
		System.out.println("转换后的地址是 :   "+text);
		headPicName=text.substring(text.lastIndexOf("/")+1);//保存图片的文件名,注意索引加1
		System.out.println("选取图片的地址是:  "+headPicName);

最后附上自己一个源代码,是上一篇的更新

package com.qinghui.sslq.fragment;

import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.qinghui.sslq.R;
import com.qinghui.sslq.activity.LoginActivity;
import com.qinghui.sslq.activity.ShowContentActivity;
import com.qinghui.sslq.entity.Detail;
import com.qinghui.sslq.util.CommonUtil;
import com.qinghui.sslq.util.NetWebServiceUtil;
import com.qinghui.sslq.util.PromptUtil;
import com.qinghui.sslq.util.ScreenManager;
import com.qinghui.sslq.util.NetWebServiceUtil.WebServiceCallBack;
import com.qinghui.sslq.util.XmlPullManager;
import com.qinghui.sslq.view.SelectPicPopupWindow;

import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import and
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值