【发布时间】:2018-05-27 06:35:08
【问题描述】:
我有 3 个活动,分别是 A、B 和 C。
A 呼叫 B。
当 B 不调用 C 时,它返回到 A。但是当 B 调用 C 时,它不返回到 A,应用程序停止。
现在真正的问题是,我想从活动 A 调用图像选择器并裁剪图像。那是活动 B,它裁剪并调用 C 来挑选图像。
活动 A:
iv_profile_pic.setOnClickListener(new View.OnClickListener() {//iv_profile_pic is an ImageView
@Override
public void onClick(View view) {
Intent i=new Intent(MainActivity.this,profile_pic_chooser.class);
i.setFlags(0);
MainActivity.this.startActivityForResult(i, 999);
Toast.makeText(getApplicationContext(),"Reached",Toast.LENGTH_SHORT).show();
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == 999) {
Bitmap image=data.getParcelableExtra("picture");
iv_profile_pic.setImageBitmap(image);
}
}
活动 B:
它有 2 个按钮。加载和裁剪。单击时加载调用 ImageChooserIntent 并选择在 B 中打开的带有指导线的图像进行裁剪。
点击后裁剪应返回 A 裁剪后的图像。
如果在没有调用 load 的情况下调用crop,它当然会以 null 返回到 A。 但是如果先点击 Load 然后调用 Crop,应用就会停止。
public void onLoadImageClick(View view) {
startActivityForResult(getPickImageChooserIntent(), 200);
}
public void onCropImageClick(View view) {
Bitmap cropped = mCropImageView.getCroppedImage(500, 500);
if (cropped != null) {
mCropImageView.setImageBitmap(cropped);
iv.setImageBitmap(cropped);
Intent returnIntent = new Intent();
returnIntent.putExtra("picture", cropped);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri imageUri = getPickImageResultUri(data);
// For API >= 23 we need to check specifically that we have permissions to read external storage,
// but we don't know if we need to for the URI so the simplest is to try open the stream and see if we get error.
boolean requirePermissions = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED &&
isUriRequiresPermissions(imageUri)) {
// request permissions and handle the result in onRequestPermissionsResult()
requirePermissions = true;
mCropImageUri = imageUri;
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
if (!requirePermissions) {
mCropImageView.setImageUriAsync(imageUri);
}
}
}
【问题讨论】:
-
onLoadImageClick是 B 调用 C 的时候? -
@Eminem 是的。正是
-
这将有助于堆栈跟踪
-
发布您的日志。您的问题可能出在 mCropImageView.getCroppedImage(500, 500);
-
@SuhaibRoomy 你能具体点。我在 Verbose 中没有看到任何不同。我应该发布 logcat 的哪一部分?
标签: android android-activity lifecycle startactivityforresult