在Android 11上,Camera intent的crop效果已被弃用,因此无法直接使用。相反,可以使用其他方法在应用程序内创建裁剪效果。以下是一个示例代码:
private Uri mCropUri;
private File mFilePath;
private void startCropIntent() {
Intent cropIntent = new Intent();
// 创建一个新的裁剪文件
try {
mFilePath = createImageFile();
} catch (IOException e) {
e.printStackTrace();
}
// 将裁剪文件URI绑定到intent上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mCropUri = FileProvider.getUriForFile(this, "com.your.package.fileprovider", mFilePath);
cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
cropIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
mCropUri = Uri.fromFile(mFilePath);
}
cropIntent.setAction("com.android.camera.action.CROP");
cropIntent.setDataAndType(mImageUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", 256);
cropIntent.putExtra("outputY", 256);
cropIntent.putExtra("scale", true);
cropIntent.putExtra("return-data", false);
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropUri);
startActivityForResult(cropIntent, CROP_IMAGE);
}
private File createImageFile() throws IOException {
// 在应用目录下创建一个新的JPEG文件并返回其路径
String imageFileName = "JPEG_" + System.currentTimeMillis() + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
return File.createTempFile(imageFileName, ".jpg", storageDir);
}
其中,createImageFile()
方法用于在应用程序目录中创建一个新的JPEG文件,startCropIntent()
方法用于启动裁剪意图并获取裁剪后的图像文件的路径。在此示例