本文转载自简书tianma,网址是: http://www.jianshu.com/p/b168cbe50066

当我们需要选择并获取图片将其展示出来时,一般会这样处理:

// 进入选择图片的界面private void selectImage(){        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.setType("image/*");        startActivityForResult(intent, CHOOSE_IMAGE);}// 在onActivityResult()回调方法中进行数据获取protected void onActivityResult(int requestCode, int resultCode, Intent data) {        // ... 进行一些判断处理        Uri uri = data.getData();        // ... 接下来进行图片显示}

以上可以看出我们获取的是Uri类型的数据,要显示图片可以先根据Uri获取图片的位置,然后再显示在界面上,那么如何根据Uri来获取图片的绝对路径呢?这就涉及到Android版本适配问题,因为Android Api版本不同,获取Uri对应的图片绝对路径也不一样,那么需要对不同的Api进行适配:

    /**     * 根据图片的Uri获取图片的绝对路径(已经适配多种API)     * @return 如果Uri对应的图片存在,那么返回该图片的绝对路径,否则返回null     */    public static String getRealPathFromUri(Context context, Uri uri) {        int sdkVersion = Build.VERSION.SDK_INT;        if (sdkVersion < 11) {            // SDK < Api11            return getRealPathFromUri_BelowApi11(context, uri);        }        if (sdkVersion < 19) {            // SDK > 11 && SDK < 19            return getRealPathFromUri_Api11To18(context, uri);        }        // SDK > 19        return getRealPathFromUri_AboveApi19(context, uri);    }    /**     * 适配api19以上,根据uri获取图片的绝对路径     */    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;    }

以上便可以获取Uri对应的图片的绝对路径,然后就可以愉快的做我们想做的事情咯~

参考链接:
Android | Display Selected Image and Its Real Path
android get real path by Uri.getPath()

更多相关文章

  1. Android(安卓)webview加载https网页时http图片无法显示
  2. Android实现动态高斯模糊
  3. android 异步加载图片总结
  4. Android界面设计的一点体会
  5. ImageView一例
  6. android Immutable bitmap passed to Canvas const...
  7. Android中多图片选择器PhotoPicker库的使用(仿微信)
  8. android 实现ImageView按压效果和解决背景图片拉申问题
  9. Button 有按下效果

随机推荐

  1. android比赛
  2. Android开发注意点
  3. Android中ListView使用总结
  4. 基于Android浮动组件 可用于应用中新功能
  5. 学习Android怎么在未来站稳脚跟
  6. Android训练课程(Android Training) - 测
  7. Android里实现基站和WIFI定位
  8. Android——Json和Gson分别是什么,以及Jso
  9. Android实训案例(八)——单机五子棋游戏,自
  10. Android热更新之so库的热更新