![](/img/trans.png)
[英]Android intent startActivityForResult doesn't return properly
[英]Why doesn't Android crop intent return ActivityResult?
我正在尝试从媒体库中裁剪图像。 我可以访问图像,启动默认裁剪工具甚至保存裁剪的图像结果。
但是,如果裁剪成功,我正在使用的意图将不会返回任何结果。
我的主要方法:
// 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。
找到了这个问题的问题。 不幸的是,这是一个Android限制。
我已将裁剪图像的输出设置为400x400。 不幸的是Android的默认裁剪器只能做256x256。 这非常令人沮丧,特别是当没有关于限制的文档时。
你在裁剪意图中调用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)
以从退出活动中获取结果。
在上面提供的链接中,有一个标题为“开始活动和获得结果”的部分,它解释了从现有活动中获取信息的多种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.