2014-11-06 80 views
0

我正在编写别人写的一些代码,并且在处理照相机意图的结果时遇到问题。Camera onActivityResult片段

基本上我有一个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从不会被调用。

回答

0

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

接收结果的片段是嵌套在其他片段内的片段,并且该方法调用没有被深度传播。

我不得不手动覆盖包含片段上的方法,它工作。

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(); 
} 
相关问题