camera intent data null in onActivityResult(int requestCode, int resultCode, Intent data) in Samsung S3

Problem: I am getting camera intent’s data null in onActivityResult(int requestCode, int resultCode, Intent data) in Samsung S3. But working well on some other devices. I customized my code for getting data and searched this issue in web but nothing found useful.

Code :

  • Progress dialog UI Freezes/Slow
  • Files showing as empty on PC but non-empty on Smartphone
  • Dynamically adding views to RelativeLayout inside ScrollView
  • Error: Execution failed for task ':app:clean'. Unable to delete file
  • Android App crashes on Lollipop
  • Spinner : onItemSelected not called when selected item remains the same
  •     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == TAKE_CAMERA && data != null && data.getData() != null)  
    
               else if (requestCode == TAKE_CAMERA) {
            if (resultCode != RESULT_OK) return;
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(tempFileUri, "image/*");
    
            intent.putExtra("outputX", 90);
            intent.putExtra("outputY", 90);
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            intent.putExtra("scale", true);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, CROP_CAMERA);
        } else if (requestCode == CROP_CAMERA && data != null) {
            Bitmap photo = data.getExtras().getParcelable("data");
            try {
                FileOutputStream out = new FileOutputStream(tempFileUri.getPath());
                photo.compress(Bitmap.CompressFormat.JPEG, 90, out);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (photo != null) {
                imagePhoto.setImageBitmap(photo);
    
                <my code>
            }
    
        }
    

    Related posts:

    Android: Scale a Drawable or background image?
    android: how to align image in the horizontal center of an imageview?
    How to get current buildType in Android Gradle configuration
    How to prevent Android bluetooth RFCOMM connection from dying immediately after .connect()?
    How to send data from one android device to another?
    Class not found: Empty test suite when running unit tests in Android Studio
  • How to get My Location changed event with Google Maps android API v2?
  • Update sqlite database when server database get updated
  • A smooth very slow text animation in an Android canvas, SUBPIXEL_TEXT_FLAG not working
  • How to open downloaded file (pdf,zip,docx, etc) in Phonegap app?
  • onUtteranceCompleted does not get called?
  • Invalid parent folder error for AppFolder in Drive API
  • 4 Solutions collect form web for “camera intent data null in onActivityResult(int requestCode, int resultCode, Intent data) in Samsung S3”

    I have Faced the Same Issue and got Work around with Below Way it will definitely help you tr it out once :

    For the Solution i have referred below link for solve the issue :

    Camera Solution for Samsung Galaxy S3

    Write the Below Code While calling captured image :

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, PICK_FROM_CAMERA);
    

    And Get your URI by Below way inside OnActivityResult() Method:

    if (resultCode != RESULT_OK)
                return;
    
            switch (requestCode) {
            case PICK_FROM_CAMERA:
                Log.i("TAG", "Inside PICK_FROM_CAMERA");
    
    
                // Describe the columns you'd like to have returned. Selecting from
                // the Thumbnails location gives you both the Thumbnail Image ID, as
                // well as the original image ID
    
                try {
                    Log.i("TAG", "inside Samsung Phones");
                    String[] projection = {
                            MediaStore.Images.Thumbnails._ID, // The columns we want
                            MediaStore.Images.Thumbnails.IMAGE_ID,
                            MediaStore.Images.Thumbnails.KIND,
                            MediaStore.Images.Thumbnails.DATA };
                    String selection = MediaStore.Images.Thumbnails.KIND + "=" + // Select
                                                                                    // only
                                                                                    // mini's
                            MediaStore.Images.Thumbnails.MINI_KIND;
    
                    String sort = MediaStore.Images.Thumbnails._ID + " DESC";
    
                    // At the moment, this is a bit of a hack, as I'm returning ALL
                    // images, and just taking the latest one. There is a better way
                    // to
                    // narrow this down I think with a WHERE clause which is
                    // currently
                    // the selection variable
                    Cursor myCursor = this.managedQuery(
                            MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                            projection, selection, null, sort);
    
                    long imageId = 0l;
                    long thumbnailImageId = 0l;
                    String thumbnailPath = "";
    
                    try {
                        myCursor.moveToFirst();
                        imageId = myCursor
                                .getLong(myCursor
                                        .getColumnIndexOrThrow(MediaStore.Images.Thumbnails.IMAGE_ID));
                        thumbnailImageId = myCursor
                                .getLong(myCursor
                                        .getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID));
                        thumbnailPath = myCursor
                                .getString(myCursor
                                        .getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
                    } finally {
                        // myCursor.close();
                    }
    
                    // Create new Cursor to obtain the file Path for the large image
    
                    String[] largeFileProjection = {
                            MediaStore.Images.ImageColumns._ID,
                            MediaStore.Images.ImageColumns.DATA };
    
                    String largeFileSort = MediaStore.Images.ImageColumns._ID
                            + " DESC";
                    myCursor = this.managedQuery(
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            largeFileProjection, null, null, largeFileSort);
                    String largeImagePath = "";
    
                    try {
                        myCursor.moveToFirst();
    
                        // This will actually give yo uthe file path location of the
                        // image.
                        largeImagePath = myCursor
                                .getString(myCursor
                                        .getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
                        mImageCaptureUri = Uri.fromFile(new File(
                                largeImagePath));
    
                    } finally {
                        // myCursor.close();
                    }
                    // These are the two URI's you'll be interested in. They give
                    // you a
                    // handle to the actual images
                    Uri uriLargeImage = Uri.withAppendedPath(
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            String.valueOf(imageId));
                    Uri uriThumbnailImage = Uri.withAppendedPath(
                            MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                            String.valueOf(thumbnailImageId));
    
                    // I've left out the remaining code, as all I do is assign the
                    // URI's
                    // to my own objects anyways...
                } catch (Exception e) {
    
                    Log.i("TAG",
                            "inside catch Samsung Phones exception " + e.toString());
    
                }
    
    
                try {
    
                    Log.i("TAG", "URI Normal:" + mImageCaptureUri.getPath());
                } catch (Exception e) {
                    Log.i("TAG", "Excfeption inside Normal URI :" + e.toString());
                }
    
                //doCrop();
    
                break;
    

    if you are providing MediaStore.EXTRA_OUTPUT, then the intent is null, but you will have the photo in the file you provided (Uri.fromFile(f)).

    I hope below link give the solution for you.It working for me.

    http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html

    I’ve solved this problem by telling the camera activity to save the image on SD card:

    tempImageNameUri = "some temporary name";
    i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    i.putExtra(MediaStore.EXTRA_OUTPUT,tempImageNameUri);
    i.putExtra("return-data", true);
    startActivityForResult(i,SOME_CONSTANT);
    

    and when the called activity finished, in onActivityResult take the item from SD card from the temporary path and use it.

    You might have got the solution to your question but this would help someone. Below is the blog link created by Commonsware which is about cropping of image after photo is taken. In which he said using action com.android.camera.action.CROP might not work perfect in all different kind of devices.

    Here is the Link

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.