关于安卓图片剪切造成软件崩溃问题的解决方法
2016-06-21 18:36
531 查看
关于安卓图片剪切造成软件崩溃问题的解决方法
在项目编写过程中由于需要运用到图片的剪切处理,并在其中走了许多的弯路,浪费了很多的时间,再次对此问题的解决方法与各位分享一下,一方面能给遇到同样问题的小猿们提供更便捷更迅速的解决方法,另一方便也给自己加深下印象。一般图片处理的几个步骤都是这样的:
调用摄像机调用系统相册
调用系统剪切
// 调用系统相机 protected void startCamera(DialogInterface dialog) { dialog.dismiss(); // 调用系统的拍照功能 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra("camerasensortype", 2); // 调用前置摄像头 intent.putExtra("autofocus", true); // 自动对焦 intent.putExtra("fullScreen", false); // 全屏 intent.putExtra("showActionIcons", false); // 指定调用相机拍照后照片的存储路径 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); startActivityForResult(intent, PHOTO_CARMERA); } // 调用系统相册 protected void startPick(DialogInterface dialog) { dialog.dismiss(); Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, PHOTO_PICK); } // 调用系统裁剪 private void startPhotoZoom(Uri uri, int size) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // crop为true是设置在开启的intent中设置显示的view可以裁剪 intent.putExtra("crop", true); // aspectX,aspectY是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspect 4000 Y", 1); // outputX,outputY是裁剪图片的宽高 intent.putExtra("outputX", size); intent.putExtra("outputY", size); // 设置是否返回数据 intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_CUT); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PHOTO_CARMERA: if (null != data) { startPhotoZoom(Uri.fromFile(tempFile), 300); } break; case PHOTO_PICK: if (null != data) { startPhotoZoom(data.getData(), 300); } break; case PHOTO_CUT: if (null != data) { setPicToView(data); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); }
但我们在真机上测试之后发现通过摄像机拍照,然后进入剪切步骤时有时会出现崩溃状况,而调用系统相册再剪切则不会。上网查了好多解决办法,有的甚至代码很复杂,确都没能很好的解决此问题。
在这里教大家一个简单粗暴的解决方式:
修改前:
修改后:
总结
经过反复试验,发现问题就是处在系统所给的uri上,那么我们就不用系统的获取uri的方法,直接将uri写死,并通过这个uri来获取需要剪切的图片。这样就不用去担心系统给的是file还是content的区别了。相关文章推荐
- POJ 1466 Girls and Boys
- 深入浅出Android Gradle构建系统(一:简介)
- 多项式求ln,求exp,开方,快速幂 学习总结
- 【海岛帝国系列赛】No.1 海岛帝国:诞辰之日
- 人工智能中的常用搜索策略
- Solr入门之官方文档6.0阅读笔记系列(九) 第四部分 数据索引操作
- 数据库批量到处的工具 SQLyog
- MySQL字符串函数
- 深入浅出Android Gradle构建系统(二:项目结构)
- (02)javascript属性
- iOS-通知正向传值问题
- Solr- How to make indexing faster - Lucene-java Wiki
- hdoj-2156-分数矩阵
- Retrofit--合理封装回调能让你的项目高逼格
- 汉诺塔问题
- spark性能调优
- 权重随机 (choice和sample)
- 支付宝及时到账
- sql 图 ,树,层次
- 用java做一个最小的操作系统内核