2014-11-06 79 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(); 
} 
相關問題