Android根据图片Uri获取图片绝对路径

来源:互联网 发布:四柱排盘软件下载 编辑:程序博客网 时间:2024/05/17 03:03


本文转载自简书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()

阅读全文
0 0
原创粉丝点击