这是个工具类直接使用就可以了
我这个是用在ZXing扫码时要读取本地图片的二维码内容时用到的。
public class getPathUtil { //简易处理板 (实际本没有发现什么问题,可以直接使用) public static String getRealPathFromURI(Context context, Uri contentURI) { String result; Cursor cursor = context.getContentResolver().query(contentURI, new String[]{MediaStore.Images.ImageColumns.DATA},// null, null, null); if (cursor == null) result = contentURI.getPath(); else { cursor.moveToFirst(); int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); result = cursor.getString(index); cursor.close(); } return result; } //复杂版处理 (适配多种API) 最后直接调用这个方法就可以了 public static String getRealPathFromUri(Context context, Uri uri) { int sdkVersion = Build.VERSION.SDK_INT; if (sdkVersion < 11) return getRealPathFromUri_BelowApi11(context, uri); if (sdkVersion < 19) return getRealPathFromUri_Api11To18(context, uri); else return getRealPathFromUri_AboveApi19(context, uri); } /** * 适配api19以上,根据uri获取图片的绝对路径 */ @TargetApi(Build.VERSION_CODES.KITKAT) private static String getRealPathFromUri_AboveApi19(Context context, Uri uri) { String filePath = null; String wholeID = DocumentsContract.getDocumentId(uri); // 使用':'分割 String id = wholeID.split(":")[1]; String[] projection = {MediaStore.Images.Media.DATA}; String selection = MediaStore.Images.Media._ID + "=?"; String[] selectionArgs = {id}; Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,// projection, selection, selectionArgs, null); int columnIndex = cursor.getColumnIndex(projection[0]); if (cursor.moveToFirst()) filePath = cursor.getString(columnIndex); cursor.close(); return filePath; } /** * 适配api11-api18,根据uri获取图片的绝对路径 */ private static String getRealPathFromUri_Api11To18(Context context, Uri uri) { String filePath = null; String[] projection = {MediaStore.Images.Media.DATA}; //这个有两个包不知道是哪个。。。。不过这个复杂版一般用不到 CursorLoader loader = new CursorLoader(context, uri, projection, null, null, null); Cursor cursor = loader.loadInBackground(); if (cursor != null) { cursor.moveToFirst(); filePath = cursor.getString(cursor.getColumnIndex(projection[0])); cursor.close(); } return filePath; } /** * 适配api11以下(不包括api11),根据uri获取图片的绝对路径 */ private static String getRealPathFromUri_BelowApi11(Context context, Uri uri) { String filePath = null; String[] projection = {MediaStore.Images.Media.DATA}; Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { cursor.moveToFirst(); filePath = cursor.getString(cursor.getColumnIndex(projection[0])); cursor.close(); } return filePath; } }
---------------------------------------------------------------------------------------------
OK 全部就在这里了 当作工具类用的