Fragment 调用系统相机闪退问题 | 您所在的位置:网站首页 › 系统自带相机闪退 › Fragment 调用系统相机闪退问题 |
调用系统相机是很常见的功能点了,基本所有需要上传头像的应用都会有这个功能,而现在基本所有应用都有头像,所以。。。 不过也会遇到很多坑,例如在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,"") 这样就不会报错并且能够顺利拿到图片了 |
CopyRight 2018-2019 实验室设备网 版权所有 |