Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android camera picture uri returning with a Failure delivering result ResultInfo

I've made a app with two buttons

  • one to select an image from the gallery
  • one to take a new image with the camera

The process for the gallery select works fine, if I take a picture with the camera it keep getting Failure delivering result ResultInfo error. And it seems the image is not writen to the folder.

Since both return the same I have one handler to cope with the result;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == 1) {  
            if (resultCode == RESULT_OK && data.getData() != null){
                try {
                    Log.i("YADDA",data.getData().toString());
                    Uri targetUri = data.getData();
                    if (targetUri != null) {
                        //Log.i("YADDA",targetUri.toString());
                        myImage nsi = new myImage();
                        nsi.ThumbNail = getThumbnail(targetUri);
                        nsi.path = targetUri;
                        nsi.FileName = FileNameBase + "_" +     String.valueOf(1 + photos.size());
                        photos.add(nsi);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }

                DrawImageGallery();
            }
        }

The Button handlers;

    nsbu1.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v){
             Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
             photoPickerIntent.setType("image/*");
             startActivityForResult(photoPickerIntent, 1);
        }
    });

    nsbu2.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v){
             Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                 // Uri myuri=Uri.fromFile(new     File(Environment.getExternalStorageDirectory().getAbsolutePath(), FileNameBase + ".jpg"));
                 Uri myuri=Uri.fromFile(new File("/mnt/sdcard/tmp/" + FileNameBase + ".jpg"));

                 Log.i("YADDA", myuri.toString());
                 intent.putExtra(MediaStore.EXTRA_OUTPUT, myuri );

                 startActivityForResult(cameraIntent, 1);  
            }
        });

Things I tried:

  • I've double checked the, manifest for write permissions on the SDcard
  • wierd thing is, the handler must be correct, because a picture from gallery works fine
  • Some version of android have a bug with this camera handler, but I've check, my Nexus S has is not one of them.
  • googled/debugged for hours and hours

Logcat output;

 09-01 10:02:59.085: ERROR/AndroidRuntime(1898): FATAL EXCEPTION: main
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.android.spot/com.android.spot.newsite}: java.lang.NullPointerException
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread.access$2000(ActivityThread.java:117)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.os.Handler.dispatchMessage(Handler.java:99)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.os.Looper.loop(Looper.java:130)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread.main(ActivityThread.java:3683)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at java.lang.reflect.Method.invokeNative(Native Method)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at java.lang.reflect.Method.invoke(Method.java:507)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at dalvik.system.NativeStart.main(Native Method)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898): Caused by: java.lang.NullPointerException
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at com.android.spot.newsite.onActivityResult(newsite.java:351)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.Activity.dispatchActivityResult(Activity.java:3908)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
 09-01 10:02:59.085: ERROR/AndroidRuntime(1898):     ... 11 more
like image 889
Dennis Avatar asked Aug 31 '11 11:08

Dennis


2 Answers

I just helped a person with the same error on the PhoneGap issue list. I believe you are missing the permission:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

from your AndroidManifest.xml file. We need to be able the write the captured image out to a .jpg file.

like image 81
Simon MacDonald Avatar answered Nov 14 '22 23:11

Simon MacDonald


EDIT

Originally I had thought that clearing my application on my phone and re-installing it had fixed the issue. It turns out this wasn't the case. I found out that there is an issue where the PhoneGap app is removed with the Android Garbage Collection when trying to grab an image from the camera. After searching for hours the solution I ended up going with was using the foreground camera plugin. This plugin creates its own camera inside of the application itself this way you don't have to worry about garbage collection picking it up.

Unfortunately, it's not fully featured and the most of the camera options aren't available to the user. It also only supports Cordova 2.4.0 which means I had to downgrade from 2.7.0. This solution will work for my current application, hopefully by the next one I write there will be a better solution. Hope this helps someone!

like image 39
Dan-Nolan Avatar answered Nov 15 '22 01:11

Dan-Nolan