Android根据图片Uri获取图片绝对路径
2017-05-31 11:43
316 查看
本文转载自简书tianma,网址是: http://www.jianshu.com/p/b168cbe50066
当我们需要选择并获取图片将其展示出来时,一般会这样处理:
以上可以看出我们获取的是Uri类型的数据,要显示图片可以先根据Uri获取图片的位置,然后再显示在界面上,那么如何根据Uri来获取图片的绝对路径呢?这就涉及到Android版本适配问题,因为Android Api版本不同,获取Uri对应的图片绝对路径也不一样,那么需要对不同的Api进行适配:
以上便可以获取Uri对应的图片的绝对路径,然后就可以愉快的做我们想做的事情咯~
参考链接:
Android | Display Selected Image and Its Real Path
android get real path by Uri.getPath()
当我们需要选择并获取图片将其展示出来时,一般会这样处理:
// 进入选择图片的界面 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()
相关文章推荐
- 一些有关Android图片的操作,判断方向,旋转,根据uri获取绝对路径,缩放与移动
- Android根据图片Uri获取图片绝对路径
- Android根据URI获取图片绝对路径
- Android根据图片Uri获取图片绝对路径
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- Android 获取图库图片 根据uri获取路径
- Android根据uri获取图片的路径(4.4+)
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- android系统通过图片绝对路径获取URI的三种方法
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- android 根据Uri获取文件绝对路径
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- android系统通过图片绝对路径获取URI的三种方法
- Android之根据图片的Uri获取对应的路径
- android 通过图片的uri来获取图片的绝对路径
- 老马的技术博客 android系统通过图片绝对路径获取URI的三种方法
- Android手机读取相册图片,根据URI获取图片路径