我的Galaxy Nexus现在运行在Android 4.3上,允许我使用这个新版本测试我的应用程序.除了裁剪外,一切似乎都很好.
我有一个应用程序,使用相机拍照,然后通过图库应用程序裁剪图像.
我也可以从画廊中选择一张图片并将其裁剪掉.
从Android 4.3开始,图库应用程序发生了变化.
如果我用相机api拍照,然后要求画廊在我的onActivityResult方法中裁剪它,resultCode设置为0(意味着取消),而我点击了裁剪视图中的“保存”.
但是,如果我从图库中选择一张图片并将其裁剪掉,那么resultCode参数将设置为-1.
在两种情况下,我都使用相同的方法裁剪图片.
我的手机上有quickpic(替代画廊应用程序),一切正常!
private void performCrop(Uri picUri) {
try {
int aspectX = 750;
int aspectY = 1011;
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(picUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("scale", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scaleUpIfNeeded", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCurrentPhotoPath)));
startActivityForResult(intent, CROP);
}
catch (ActivityNotFoundException anfe) {
String errorMessage = "Your device doesn't support the crop action!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
在Android 4.2.2上一切正常.
谢谢您的帮助 !
解决方法:
您是否考虑过使用像这样的库:
https://github.com/biokys/cropimage
我发现com.android.camera.action.CROP有时可能会因手机而异,但并不总是可用,所以如果你想发布它,它可能会给你带来一些问题.
更新:
我用Android 4.3测试了上面的库,它没有问题.您只需将库添加到项目中即可.
然后,您可以以非常类似的方式编写方法:
private void performCrop(Uri picUri) {
//you have to convert picUri to string and remove the "file://" to work as a path for this library
String path = picUri.toString().replaceAll("file://", "");
try {
int aspectX = 750;
int aspectY = 1011;
Intent intent = new Intent(this, CropImage.class);
//send the path to CropImage intent to get the photo you have just taken or selected from gallery
intent.putExtra(CropImage.IMAGE_PATH, path);
intent.putExtra(CropImage.SCALE, true);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCurrentPhotoPath)));
startActivityForResult(intent, CROP);
}
catch (ActivityNotFoundException anfe) {
String errorMessage = "Your device doesn't support the crop action!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}