针对android 11 intent1.setDataAndType(uri, “image/*”);,如果是7.0及以上的系统使用FileProvider的方式创建一个Uri,7一下 Uri.fromFile,不要传cut.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));//保存到uri指定的位置,指定位置就剪切不了,不指定位置 在onAcrivityResult里面data.getdata就可以获取到uri,然后用Glide.asfile就可以获取到剪切后的文件。
private void cropPhoto(Uri imageUri) {
Intent cut = new Intent("com.android.camera.action.CROP");
cut.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
cut.setDataAndType(imageUri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
cut.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
cut.putExtra("aspectX", 1);
cut.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片尺寸
cut.putExtra("outputX", 480);
cut.putExtra("outputY", 480);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
File file = new File(mFilePath, mFileCropName);
if (!file.exists()) {
try {
new File(mFilePath).mkdirs();
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
cut.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
//保存到uri指定的位置
}
try {
startActivityForResult(cut, USE_CROP);
} catch (Exception e) {
e.printStackTrace();
ToastCompat.show(this, "未找到剪切程序,自动剪切", Toast.LENGTH_SHORT);
cropPicByGlide();
}
}
if (requestCode == USE_CROP && resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Glide.with(getContext())
.asFile()
.load(data.getData())
.into(new CustomTarget<File>() {
@Override
public void onResourceReady(
@NonNull File resource, @Nullable
Transition<? super File> transition)
{...........}