Fragment 调用系统相机闪退问题
2016-04-01 17:04
162 查看
调用系统相机是很常见的功能点了,基本所有需要上传头像的应用都会有这个功能,而现在基本所有应用都有头像,所以。。。
不过也会遇到很多坑,例如在fragment中 不走onActivityResult方法。
解决办法就是在fragment 所在的Activity中重写onActivityResult方法 ,如下:
其中 super方法必须包含
然后就是调用fragment的onActivityResult方法。
这个问题比较好处理,不过还会遇到一个问题例如:
data ==null
现在同行的方法就是 调用系统相机时,把照片保存在一个固态
不要以为这样就可以了 ,第三个坑来袭。
就是在这种情况下 你获取照片的方法如下:
filename ==null
原因可能是在fragment 调用相机并且返回后,fileName 没有保存
所以我的方法是保存在本地并且从本地读取。
存:
读取:
不过也会遇到很多坑,例如在fragment中 不走onActivityResult方法。
解决办法就是在fragment 所在的Activity中重写onActivityResult方法 ,如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); personFragment.onActivityResult(requestCode, resultCode, data);
其中 super方法必须包含
然后就是调用fragment的onActivityResult方法。
这个问题比较好处理,不过还会遇到一个问题例如:
data ==null
现在同行的方法就是 调用系统相机时,把照片保存在一个固态
private String fileName; public final File FILE_SDCARD = Environment .getExternalStorageDirectory(); public final File FILE_LOCAL = new File(FILE_SDCARD, "vCar"); public final File FILE_PIC_SCREENSHOT = new File(FILE_LOCAL, "images/screenshots"); /** * 相机选择 */ private void selectCamera() { fileName = String.valueOf((new Date()).getTime()) + ".jpg"; SPUtil.getInstance().putString(Constant.FILE_PATH,fileName); File filePath = FILE_PIC_SCREENSHOT; if (!filePath.exists()) { filePath.mkdirs(); } try { Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); File f = new File(filePath, fileName); // localTempImgDir和localTempImageFileName是自己定义的名字 Uri u = Uri.fromFile(f); intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); intent.putExtra(MediaStore.EXTRA_OUTPUT, u); startActivityForResult(intent, TAKE_PICTURE); } catch (Exception e) { e.printStackTrace(); } }
不要以为这样就可以了 ,第三个坑来袭。
就是在这种情况下 你获取照片的方法如下:
File f = new File(FILE_PIC_SCREENSHOT, fileName); Intent intent = new Intent(getActivity(), ActivityCropper.class); intent.putExtra("path", f.getAbsolutePath()); // intent.putExtra("name", select_Num); startActivityForResult(intent, CROP_PICTURE);这时候在有些手机上还会报错,例如
filename ==null
原因可能是在fragment 调用相机并且返回后,fileName 没有保存
所以我的方法是保存在本地并且从本地读取。
存:
SPUtil.getInstance().putString(Constant.FILE_PATH,"")
读取:
SPUtil.getInstance().getString(Constant.FILE_PATH,"")这样就不会报错并且能够顺利拿到图片了
相关文章推荐
- thinkPHP连接数据库
- SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)
- Jacoco配置的问题
- 2016/4/1 jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色
- 解决Spring中singleton的Bean依赖于prototype的Bean的问题
- 贪心算法—problem j
- Android本地数据存储(CacheDataUtil )
- 怎么实现ZBrush中3D图层的快速运用
- Android中用Matrix实现ImageView里的图片平移和缩放动画
- 20160401 第5章 MFC 集合类(来自《MFC Windows 程序设计(第2版)》)
- 数据结构与算法-树的遍历
- cocos:有限状态机
- 正向代理,反向代理和透明代理
- angularjs
- iOS 判定string是不是中文字符
- xfs文件系统
- PLSQL连Oracle数据库Could not load "……\bin\oci.dll"
- web.xml与listener
- 20160401 第4章 菜 单(来自《MFC Windows 程序设计(第2版)》)
- 数字签名