Android:content uri转 file uri
2015-10-23 12:05
316 查看
Android:content uri转 file uri
在android开发中我们在处理一图片时,经常需要将android uri如content://media/external/image/media/102这样格式转换成File类型或者获取真实文件路径。网上有不少示例代码,但是我看到的都是只支持英文的,如果路径中含中文,会出现空指针异常:
网上的代码:
Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = managedQuery(uri,proj,null,null,null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actualimagecursor.moveToFirst(); String img_path = actualimagecursor.getString(actual_image_column_index); File file = new File(img_path);
现在我们可以采用另一种方法实现支持中文的路径:
private Uri saveBitmap(Bitmap bm) { File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.cumt.csdn"); if(!tmpDir.exists()) { tmpDir.mkdir(); } File img = new File(tmpDir.getAbsolutePath() + "csdn.png"); try { FileOutputStream fos = new FileOutputStream(img); bm.compress(Bitmap.CompressFormat.PNG, 85, fos); fos.flush(); fos.close(); return Uri.fromFile(img); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } } //把content类型的uri装换为file类型的uri private Uri convertUri(Uri uri){ InputStream is = null; try { is = getContentResolver().openInputStream(uri); Bitmap bitmap = BitmapFactory.decodeStream(is); is.close(); return saveBitmap(bitmap); } catch (FileNotFoundException e) { return null; } catch (IOException e) { return null; } }
在效率上很明显后者效率不高,需要保存图片再获取其file uri。我们可以两者结合使用:
<span style="white-space:pre"> </span>Uri uri; uri = data.getData(); try { String res = null; String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, proj, null, null, null); if(cursor.moveToFirst()){; int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); } cursor.close(); File file = new File(res); Uri fileUri = Uri.fromFile(file); } catch (Exception e) { <span style="white-space:pre"> </span>Uri fileUri = convertUri(uri); }
目前在项目中是这样使用的,还没有找到更好的办法。。。。
相关文章推荐
- Android实现两个ScrollView互相联动的同步滚动效果代码
- android sd卡路径正确获取 双sd卡获取(getexternalstoragedirectory)
- AndroidStudio 显示中文乱码
- 【Android学习】Android编码规范
- Android内存泄漏分析及调试
- 推荐一个能跑的Android4.4 能跑的Android GPS HAL驱动源码
- Android Studio中常用设置与快捷键,自用
- android权限大全
- [Android] Handler源码解析 (Java层)
- Android实现调用系统相册和拍照的Demo示例
- Android M USB流程
- Android数据适配器(Adapter)优化:使用高效的ViewHolder
- Android实现捕获TextView超链接的方法
- android打开相关系统应用
- android binder 基础实例及解析(一)
- android LayoutInflater和inflate()方法的用法
- Android开发学习笔记:Android学习进阶路线导航线路(Android源码分享)
- Android FragmentManage FragmentTransaction介绍
- Android PullToRefreshListView上拉刷新和下拉刷新
- Android--检验设备是否携带相机