为什么Android作物意图不返回ActivityResult?

时间:2012-02-19 01:52:58

标签: android android-intent android-image onactivityresult android-crop

我正在尝试从媒体库中裁剪图像。我可以访问图像,启动默认裁剪工具,甚至保存裁剪后的图像结果。

然而,如果裁剪成功,我正在使用的意图将不会返回任何结果。

我的主要方法:

// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);         
intent.setData(uri);   
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);  

- OnActivityResult()方法 -

// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Log.d(TAG, "user cropped a photo");
        signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
    } else
        Log.d(TAG, "user cancelled photo crop");
}

如果我取消了裁剪活动,我会成功获得“用户取消的照片裁剪”消息。但是,如果我裁剪图像,新裁剪的图像将出现在目标目录中,但OnActivityResult()函数永远不会被调用。是什么给了什么?

看着LogCat,我发现每次保存裁剪的图像时,“JavaBinder”都会抱怨“Binding Transaction失败”。我知道这与内存有某种关系,但裁剪文件的大小只有24KB。

2 个答案:

答案 0 :(得分:15)

发现此问题的问题。不幸的是,这是一个Android限制。

请参阅Android cropper cannot go beyond 256?

我已将裁剪图像的输出设置为400x400。不幸的是Android的默认裁剪器只能做256x256。这非常令人沮丧,特别是当没有关于限制的文档时。

答案 1 :(得分:1)

您是否在作物意图中调用setResult(int)link)?

<强>更新:\

发送RESULT_CANCELLED是默认值。除非你实施一些事情,否则它将一直被发回。

在您的裁剪意图中,当您完成编辑(即用户点击完成按钮或类似内容)后,该过程的一部分将调用setResult(RESULT_OK)

示例:

public void doneBTNPressed( View view ) {
    if ( view.getId() == R.id.doneBTN ) {
        this.isCropped = true;
    }
}

@Override    
protected void onPause() {
        if ( this.isCropped ) {
            setResult(RESUL_OK);
        }
        super.onPause();
    }

该结果(RESULT_OK,加上你指定的另一个整数)被传递回调用Activity(假设使用了startActivityForResult())。根据您的需要,还有一些覆盖。在调用(父)活动中,您必须实现onActivityResultint,int,Intent)以从退出活动中获取结果。

在上面提供的链接中,有一个标题为“开始活动和获得结果”的部分,它解释了从现有活动中获取信息的多种方法。