课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
烟台达内小编:在Android7.0之前,你可以通过如下方法来裁切照片:
File file=newFile(Environment.getExternalStorageDirectory(),"/temp/"+System.currentTimeMillis() +".jpg");if(!file.getParentFile().exists())file.getParentFile().mkdirs(); Uri outputUri = Uri.fromFile(file); Uri imageUri=Uri.fromFile(newFile("/storage/emulated/0/temp/1474960080319.jpg")); Intent intent =newIntent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri,"image/*"); intent.putExtra("crop","true"); intent.putExtra("aspectX",1); intent.putExtra("aspectY",1); intent.putExtra("scale",true); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection",true);// no face detectionstartActivityForResult(intent,1008);
和拍照一样,上述代码在Android7.0上同样会引起android.os.FileUriExposedException异常,解决办法就是上文说说的使用FileProvider。
然后,将上述代码改为如下即可:
File file=newFile(Environment.getExternalStorageDirectory(),"/temp/"+System.currentTimeMillis() +".jpg");if(!file.getParentFile().exists())file.getParentFile().mkdirs(); Uri outputUri = FileProvider.getUriForFile(context,"com.jph.takephoto.fileprovider",file); Uri imageUri=FileProvider.getUriForFile(context,"com.jph.takephoto.fileprovider",newFile("/storage/emulated/0/temp/1474960080319.jpg");//通过FileProvider创建一个content类型的UriIntent intent =newIntent("com.android.camera.action.CROP"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(imageUri,"image/*"); intent.putExtra("crop","true"); intent.putExtra("aspectX",1); intent.putExtra("aspectY",1); intent.putExtra("scale",true); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection",true);// no face detectionstartActivityForResult(intent,1008);
另外,裁切照片推荐大家使用开源工具库TakePhoto, TakePhoto是一款在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。