2011-08-31 16 views
6

he hecho una aplicación con dos botonesuri imagen de la cámara androide que regresan con un fracaso la entrega de resultado ResultInfo

  • uno para seleccionar una imagen de la galería
  • uno para tomar una nueva imagen con la cámara

El proceso para la galería de selección funciona bien, si tomo una foto con la cámara, sigue recibiendo el error Failure delivering result ResultInfo. Y parece que la imagen no está escrita en la carpeta.

Dado que ambos devuelven lo mismo, tengo un solo controlador para hacer frente al resultado;

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); 
      } 
     }); 

cosas que intenté:

  • He comprobado el doble, que se manifiesta por permisos de escritura en la tarjeta SD cosa extraña
  • es, el controlador debe ser correcta, ya que una imagen de las obras galería bien
  • Algunas versiones de Android tienen un error con este controlador de cámara, pero he comprobado, mi Nexus S no es uno de ellos.
  • googled/depurado por horas y horas

salida Logcat;

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 
+1

http://www.softwarepassion.com/android-series-taking-photos-with-andorid-built-in-camera/ –

+0

Gracias por su sugerencia, lo he intentado, sin resultado, el mismo error. Thnx de todos modos! – Lectere

+0

¿Puedes publicar el logcat donde están los errores? –

Respuesta

1

Acabo de ayudar a una persona con el mismo error en la lista de problemas PhoneGap. Creo que le falta el permiso:

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

desde su archivo AndroidManifest.xml. Necesitamos poder escribir la imagen capturada en un archivo .jpg.

1

EDITAR

en principio había pensado que la limpieza de mi aplicación en mi teléfono y volver a instalarlo había fijado el problema. Resulta que este no era el caso. Descubrí que hay un problema por el cual la aplicación PhoneGap se elimina con la Colección de elementos extraíbles de Android cuando se intenta capturar una imagen de la cámara. Después de buscar durante horas, la solución con la que terminé fue usar el foreground camera plugin. Este plugin crea su propia cámara dentro de la aplicación, de esta manera no tiene que preocuparse por la recolección de basura que la recoge.

Desafortunadamente, no está completamente presentado y la mayoría de las opciones de la cámara no están disponibles para el usuario. También solo es compatible con Cordova 2.4.0, lo que significa que tuve que pasar de 2.7.0 a la versión anterior. Esta solución funcionará para mi aplicación actual, con suerte en la siguiente que escriba habrá una mejor solución. ¡Espero que esto ayude a alguien!

Cuestiones relacionadas