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
- Android根据图片Uri获取图片绝对路径
- Android根据图片Uri获取图片绝对路径
- Android根据URI获取图片绝对路径
- 根据uri获取图片的绝对路径
- 绝对路径获取图片URI
- 一些有关Android图片的操作,判断方向,旋转,根据uri获取绝对路径,缩放与移动
- android 通过图片的uri来获取图片的绝对路径
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- Android手机读取相册图片,根据URI获取图片路径
- 根据uri获取图片文件
- android 根据Uri获取文件绝对路径
- Android 获取图库图片 根据uri获取路径
- java enum(枚举)使用详解 + 总结
- 20170531Windows08_CopyFile
- CODEVS 1020 孪生蜘蛛
- 利用KMeans算法对图片进行分割
- BM字符串匹配算法笔记
- Android根据图片Uri获取图片绝对路径
- Java职业生涯规划
- Android线程池浅析
- 史上最全的常用开发工具类收集
- 网页抓取工具之数据预处理
- unix 网络编程
- Java集合类汇总
- 117. Populating Next Right Pointers in Each Node II
- 微服务,微架构[十二]springboot监听器,过滤器