没有'输出'额外指定的例外

时间:2015-07-15 06:57:50

标签: gallery crop

我使用Google Photo应用程序选择图库照片,然后当我裁剪图片并保存时,它会捕获异常,这是我的代码:

goto_picture.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            intent = new Intent(Intent.ACTION_PICK, null);
            intent.setDataAndType(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    IMAGE_UNSPECIFIED);
            startActivityForResult(intent, PHOTO_ZOOM);
            dialog.cancel();
        }
    });


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == PHOTO_GRAPH) {
            startPhotoZoom(Uri.fromFile(file));
            String imagePath = SystemUtils.getSDPath() + "/temp.jpg";
            File picture = new File(imagePath);
            if (picture.exists()) {
                pictureBitmap = BitmapFactory.decodeFile(imagePath);
                ImageUtils.SaveCacheBitmap(pictureBitmap);
                rvEditAvatar.setImageBitmap(pictureBitmap);

            }
        }
        if (requestCode == PHOTO_ZOOM) {
            startPhotoZoom(data.getData());
        }

        if (requestCode == PHOTO_RESULT) {

            Bundle extras = data.getExtras();
            if (extras != null) {
                pictureBitmap = extras.getParcelable("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                pictureBitmap.compress(Bitmap.CompressFormat.JPEG, 100,
                        stream);
                ImageUtils.SaveCacheBitmap(pictureBitmap);
                rvEditAvatar.setImageBitmap(pictureBitmap);
            }
        }

    } 
}

public void startPhotoZoom(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", 180);
    intent.putExtra("outputY", 180);
    intent.putExtra("return-data", true);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    startActivityForResult(intent, PHOTO_RESULT);
}

logcat的:

  

流程:com.google.android.apps.photos,PID:7031   java.lang.RuntimeException:无法恢复活动   {} com.google.android.apps.photos/com.google.android.apps.photos.photoeditor.intents.EditActivity:   java.lang.UnsupportedOperationException:No' output'额外指定   并且无法保存到指定的inputUri:   内容://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F72072/ACTUAL

2 个答案:

答案 0 :(得分:0)

如异常所述,您必须指定输出额外的内容,如下面的代码。

intent.putExtra(MediaStore.EXTRA_OUTPUT, someOutPutPath);

如果裁剪大图像可能导致崩溃,则返回数据不安全。我认为这就是为什么它迫使你使用额外的输出而不是直接使用数据。因此,您也可以将return-data设置为false:

intent.putExtra("return-data", false);

答案 1 :(得分:0)

我今天遇到了这个问题,并通过仔细检查数据传回来解决。我在Android L和Android 4上测试以下代码。在Android L上,fileUri不是空的,而在Android L之前我们得到了fileUri null(在这种情况下,我只通过getData得到了位图)。

private Bitmap decodeBitmapFromCrop(Intent data) {
    Bundle extras = data.getExtras();
    Bitmap photo = null;
    if (extras != null) {
        photo = extras.getParcelable("data");
    } else {
        Uri fileUri = data.getData();
        if (fileUri != null) {
            try {
                photo = MediaStore.Images.Media.getBitmap(getContentResolver(), fileUri);
            } catch (IOException e) {
                XXLog.d(TAG, "Media.getBitmap", e);
            }
        }


    }
    return photo;
}