Question

I'm intenting Camera Intent which works perfectly on other devices except Sony C2305 [4.2.2]. Tested on 4.2.2 Emulator which works perfectly fine.

Following is the snippet . I uses to call Camera Intent

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 getImagePath();
 intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
 startActivityForResult(intent, REQUEST_CAMERA);

 public void getImagePath()
        {
            File imageDirectory =null;
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) 
            {
                imageDirectory = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC");
            }
            else
            {
                imageDirectory = new File(SmartConsultant.getApplication().getApplicationContext().getFilesDir().getAbsolutePath());
            }
            imageDirectory.mkdirs();
            File tempFile = new File(imageDirectory, getVideoName()+ AppConstants.EXTENSION); //AppConstants.Extension is .jpg and getVideoName to fetch name of file as per current sys time.
            outputFileUri = Uri.fromFile( tempFile );
            currentFileUri = outputFileUri;
        }

Getting result of Activity as:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
   if (requestCode == REQUEST_CAMERA) {
            if(resultCode == RESULT_OK)
            {
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                btmapOptions.inSampleSize = 2;
                bm = BitmapFactory.decodeFile(currentFileUri.getPath(), btmapOptions);
                NewExpensesActivity.this.data.add(bm);
                imagesAdapter.notifyDataSetChanged();
                    compressedPath = ImageCompression.compressImage(currentFileUri.getPath());//ADDED 10018
                    galleryAddPic();
                    paths.add(compressedPath);//EDITED 10018

            }
        }
          }

But it throws Null Pointer Exception on delivering result Log Cat:

 java.lang.RuntimeException: Unable to resume activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2899)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2928)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3865)
at android.app.ActivityThread.access$700(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3488)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2883)
... 13 more
 Caused by: java.lang.NullPointerException
at com.netdoers.com.ui.AddSxActivity.onActivityResult(AddSxActivity.java:485)
at android.app.Activity.dispatchActivityResult(Activity.java:5371)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3484)
... 14 more
Was it helpful?

Solution

Camera Intent

           try {
                Log.d("Main Activity", "Camera");

                String fileName = "temp.jpg";  
                ContentValues values = new ContentValues();  
                values.put(MediaStore.Images.Media.TITLE, fileName);  
                mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
                intent.putExtra(MediaStore.EXTRA_OUTPUT,mImageCaptureUri);  

                startActivityForResult(intent, 2);
            } catch (Exception e) {
                // TODO Auto-generated catch block

            }

onActivityResult

       protected void onActivityResult(final int requestCode,final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("Main Activity", "On Activity Result");


    try {
        Uri selectedImage=null;

        if(requestCode == 2 && resultCode == RESULT_OK )
        {

            /* Log.d("Main Activity", "Camera");
              File fi = new File("/sdcard/tmp");
                 try {
                   selectedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
                     if (!fi.delete()) {
                         Log.i("logMarker", "Failed to delete " + fi);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }*/
            selectedImage=mImageCaptureUri;
            /*          mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                       "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
            selectedImage=mImageCaptureUri;*/
        }
        if(selectedImage==null)
        {
            Log.d("Main Activity","Back");
            return;
        }



    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.d("Main Activity","Exception");
        return;
    }      
    return;

}

selectedImage is Uri of the captured Image and it is working fine in Sony mobiles.

OTHER TIPS

Here, you are not giving any image name in tempFile, so that taken image can be saved with that name in SDCard.

Now, say, image name will be 123.jpg....replace this

File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC";);

with...

File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC/123.jpg");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top