How to get the result from onActivityResult in a fragment?

I used Navigation drawer in every click that I called Fragments , so in one element that I called one Fragment , in this fragment I need to get the image from the camera and set it as canvas background . In this I took a camera image, but I don’t know how to get this image after capture and set it to the background on the canvas.

Fragment Code

 import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.Toast; import com.ssoft.admin.code.SharedPreferenceStore; import com.ssoft.admin.code.Tools; import com.ssoft.admin.salesmateco.FragSiteInspectionAdditional; import com.ssoft.admin.salesmateco.R; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class FragSignature extends Fragment implements View.OnClickListener { Button mSIBtnCamera; Fragment fragment; Tools mTools; private static final int RESULT_OK = 1; private static final int RESULT_CANCELED = 0; Uri imageUri = null; final int CAMERA_DATA = 100, INTENT_DATA = 1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.frag_site_inspection_signature, null); mSIBtnCamera = (Button) rootView.findViewById(R.id.camera); mSIBtnCamera.setOnClickListener(this); return rootView; } @Override public void onClick(View v) { if (v.getId() == R.id.camera) { captureImage(); } else { Toast.makeText(getActivity().getApplicationContext(), "FragSIPhotos Add Button OnClick", Toast.LENGTH_SHORT) .show(); } } public void captureImage() { // Define the file-name to save photo taken by Camera activity String fileName = "Images.jpg"; // Create parameters for Intent with filename ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera"); // imageUri is the current activity attribute, define and save it for // later usage Uri imageUri = getActivity().getApplicationContext() .getContentResolver() .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); /**** * EXTERNAL_CONTENT_URI : style URI for the "primary" external storage * volume. ****/ // Standard Intent action that can be sent to have the camera // application capture an image and return it. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, INTENT_DATA); Log.e("captureImage()", "state -1"); getActivity().startActivityForResult(intent, CAMERA_DATA); Log.e("captureImage()", "end"); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("OnActivityResult()", "1"); if (requestCode == CAMERA_DATA) { Log.e("OnActivityResult()", "2"); if (resultCode == RESULT_OK) { // Image captured and saved to fileUri specified in the Intent Log.e("OnActivityResult()", "3"); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture Log.e("OnActivityResult()", "4"); } else { // Image capture failed, advise user Log.e("OnActivityResult()", "5"); } } Log.e("OnActivityResult()", "6"); super.onActivityResult(requestCode, resultCode, data); Log.e("OnActivityResult()", "7"); } } 
+8
android android-fragments android-camera
source share
3 answers

In the Activity class:

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

In the fragment:

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

Option 1:

If you call startActivityForResult() from the fragment, you should call startActivityForResult() not getActivity().startActivityForResult() , as this will result in the onActivityResult() fragment.

If you don’t know where you are calling startActivityForResult() and how you will call methods.

Option 2:

Since Activity gets the result of onActivityResult() , you need to override the onActivityResult() action and call super.onActivityResult() to propagate to the corresponding fragment for raw result codes or for all.

If the above 2 options do not work, refer to option 3, as this will definitely work.

Option 3:

An explicit call from the fragment to the onActivityResult function as follows

In the parent activity class, override the onActivityResult() method and even override it in the fragment class and call it as the following code.

In action:

@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) {Snippet fragment = getSupportFragmentManager (). FindFragmentById ("yourFragment"); fragment.onActivityResult (requestCode, resultCode, data); }

In the fragment:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //in fragment class callback } 
+16
source share

Replace

 getActivity().startActivityForResult(intent, CAMERA_DATA); 

from

 startActivityForResult(intent, CAMERA_DATA); 
+4
source share

onActivityResult should be implemented in Activity, this class is your fragment.
Apply onActivityResult inside FragmentActivity.

0
source share

All Articles