不多说了,下面是两种方法,方法一的兼容性更强,大家都知道Android系统碎片化很严重的吧~
------------------------------------------------------------
-------------------方法一------------------------------
------------------------------------------------------------
------------------------------------------------------------
public String getImagePathFromUri(Uri fileUrl)
{
String fileName = null;
Uri filePathUri = fileUrl;
if (fileUrl != null)
{
if (fileUrl.getScheme().toString().compareTo("content") == 0)
{
// content://开头的uri
Cursor cursor = getContentResolver().query(fileUrl, null, null, null,null);
if (cursor != null && cursor.moveToFirst())
{
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
fileName = cursor.getString(column_index); // 取出文件路径
// Android 4.1 更改了SD的目录,sdcard映射到/storage/sdcard0
if (!fileName.startsWith("/storage") && !fileName.startsWith("/mnt"))
{
// 检查是否有”/mnt“前缀
fileName = "/mnt" + fileName;
}
cursor.close();
}
}
else if (fileUrl.getScheme().compareTo("file") == 0) // file:///开头的uri
{
fileName = filePathUri.toString();// 替换file://
fileName = filePathUri.toString().replace("file://", "");
int index = fileName.indexOf("/sdcard");
fileName = index == -1 ? fileName : fileName.substring(index);
if (!fileName.startsWith("/mnt"))
{
// 加上"/mnt"头
fileName += "/mnt";
}
}
}
return fileName;
}
------------------------------------------------------------
---------------------方法二-------------------------------
------------------------------------------------------------
------------------------------------------------------------
public String uri2Path(Uri uri)
{
int actual_image_column_index;
String img_path;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
actual_image_column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
img_path = cursor.getString(actual_image_column_index);
return img_path;
}