相片onActivityResult片段

时间:2014-11-06 15:52:47

标签: android android-intent android-fragments camera fragment

我正在处理别人写的一些代码,而且我无法处理相机意图的结果。

基本上我有一个DashBoardActivity,其中包含一个标签,其中包含一个名为" MyProfileContainer"的片段,其中包含一个" SettingsFragment"片段,其中包含" EditProfileFragment"片段。

在EditProfileFragment中,用户可以为他的个人资料拍照。它可以工作,但它调用仪表板活动上的onActionResult。

我阅读了一些关于如何将其重定向到EditProfileFragment的指南,但我还没能做到。 我在这一天失去了几天,我无法弄明白。

这是仪表板活动上的onActivityResult

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

这是EditProfileFragment

private  Uri imageUri = null;

public void captureImage() {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photo = new File(Environment.getExternalStorageDirectory(),  "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    getParentFragment().startActivityForResult(intent, 100);
}

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

            if (requestCode == 100 && resultCode == Activity.RESULT_OK) {
                Uri selectedImage = imageUri;
                getActivity().getContentResolver().notifyChange(selectedImage, null);
                ContentResolver cr = getActivity().getContentResolver();
                Bitmap bitmap;
                try {
                    bitmap = android.provider.MediaStore.Images.Media
                            .getBitmap(cr, selectedImage);

                    profilePhoto.setImageBitmap(bitmap);
                    Toast.makeText(getActivity(), selectedImage.toString(),
                            Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    Toast.makeText(getActivity(), "Failed to load", Toast.LENGTH_SHORT)
                            .show();
                    Log.e("Camera", e.toString());
                }
            }

}

我不知道是否必须在这两者之间的每个课程上覆盖该方法,或者如果我做错了其他事情,但我确定从不调用EditProfileFragment onActivityResult。 / p>

2 个答案:

答案 0 :(得分:0)

我发现了问题,这实际上是Android的一个错误。

收到结果的片段是一个嵌套在其他片段中的片段,方法调用没有被正确传播。

我必须手动覆盖包含片段上的方法并且它有效。

答案 1 :(得分:0)

在嵌套片段中调用OnActivityResult的简单技巧。

1)在captureImage方法中添加此代码,它将启动一个新活动。

Intent intent = new Intent(getContext(),CameraPreviewActivity.class);

startActivityForResult(intent,111);

2)现在CameraPreviewActivity活动将打开,它将启动相机活动并将结果返回到片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, FragmentAccPhoto.REQUEST_IMAGE_CAPTURE);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    setResult(RESULT_OK, data);
    finish();
}