2011-10-13 9 views
6

ACTUALIZACIÓN --------------- ---------------fracaso cámara Phonegap al recuperar los datos

Parece que there' s algún tipo de problema con la cámara HTC Desire y esta versión de Phonegap. El problema parece ser la forma en que HTC devuelve las especificaciones de la cámara en Android.

--------------- --------------- ACTUALIZACIÓN

He estado usando PhoneGap para reescribir la código de mi aplicación anterior pero no necesito usar la API de la cámara. Cuando lo usé en un teléfono real, se bloqueó después de tomar la foto y recibí este error con SendLog.

10-07 09:44:46.980 D/AndroidRuntime(1626): Shutting down VM 
10-07 09:44:46.980 W/dalvikvm(1626): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
10-07 09:44:46.989 W/CameraThread(1159): Release Camera - set mIsLastCameraClosed to true 
10-07 09:44:46.989 W/CameraThread(1159): CameraHandler Message - CLOSE_CAMERA end 
10-07 09:44:46.989 E/AndroidRuntime(1626): FATAL EXCEPTION: main 
10-07 09:44:46.989 E/AndroidRuntime(1626): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=33, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.theinit.example/com.theinit.example.TestPhoneGapActivity}: java.lang.NullPointerException 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3734) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.access$2800(ActivityThread.java:135) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.os.Looper.loop(Looper.java:144) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at dalvik.system.NativeStart.main(Native Method) 
10-07 09:44:46.989 E/AndroidRuntime(1626): Caused by: java.lang.NullPointerException 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.content.ContentResolver.openInputStream(ContentResolver.java:286) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.phonegap.CameraLauncher.onActivityResult(CameraLauncher.java:248) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.phonegap.DroidGap.onActivityResult(DroidGap.java:1346) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.Activity.dispatchActivityResult(Activity.java:3931) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3730) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  ... 11 more 

¿Alguien sabe por qué sucede esto?

Ésta es mi Camera.js

Ésta es mi Camera.js

var options = { quality : 75, 
     destinationType : Camera.DestinationType.DATA_URL, 
     sourceType : Camera.PictureSourceType.CAMERA, 
     allowEdit : true, 
     targetWidth: 100, 
     targetHeight: 100 }; 

function capturePhoto() { 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, options); 
} 

function onPhotoDataSuccess() { 
    // Uncomment to view the base64 encoded image data 
    var theHTML = ''; 
    theHTML = '<div id="info">CameraSuccess</div>'; 
    document.getElementById('main').innerHTML = theHTML; 
} 

function onFail(message) { 
    // Called if something bad happens. 
    alert('Failed because: ' + message); 
} 

Espero que ayuda

Gracias a todos por cierto

Respuesta

1

------ --------- ACTUALIZACIÓN ---------------

Parece que hay algún tipo de problema con la cámara HTC Desire y esta versión de Phonegap. El problema parece ser la forma en que HTC devuelve las especificaciones de la cámara en Android.

--------------- --------------- ACTUALIZACIÓN

Este código funciona bien para mí, Solo tengo la referencia .js a este código en el índice y un botón con la función capturePhoto().

Espero que ayude a cualquiera a solucionar sus problemas.

var pictureSource; // picture source 
var destinationType; // sets the format of returned value 

// Wait for PhoneGap to connect with the device 
// 
document.addEventListener("deviceready",onDeviceReady,false); 

// PhoneGap is ready to be used! 
// 
function onDeviceReady() { 
    pictureSource=navigator.camera.PictureSourceType; 
    destinationType=navigator.camera.DestinationType; 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoDataSuccess(imageData) { 
    // Uncomment to view the base64 encoded image data 
    // console.log(imageData); 

    // Get image handle 
    // 
    var smallImage = document.getElementById('smallImage'); 

    // Unhide image elements 
    // 
    smallImage.style.display = 'block'; 

    // Show the captured photo 
    // The inline CSS rules are used to resize the image 
    // 
    smallImage.src = "data:image/jpeg;base64," + imageData; 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoURISuccess(imageURI) { 
    // Uncomment to view the image file URI 
    // console.log(imageURI); 

    // Get image handle 
    // 
    var largeImage = document.getElementById('largeImage'); 

    // Unhide image elements 
    // 
    largeImage.style.display = 'block'; 

    // Show the captured photo 
    // The inline CSS rules are used to resize the image 
    // 
    largeImage.src = imageURI; 
} 

// A button will call this function 
// 
function capturePhoto() { 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 }); 
} 

// A button will call this function 
// 
function capturePhotoEdit() { 
    // Take picture using device camera, allow edit, and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true }); 
} 

// A button will call this function 
// 
function getPhoto(source) { 
    // Retrieve image file location from specified source 
    navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
    destinationType: destinationType.FILE_URI, 
    sourceType: source }); 
} 

// Called if something bad happens. 
// 
function onFail(message) { 
    alert('Failed because: ' + message); 
} 
+0

Eso es un montón de código ... ¿Qué parte específica agregaste para solucionar el problema? – Roel

4

Acabo de ayudar a una persona con el mismo error en la lista de problemas de 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.

+0

Lo pensé al principio pero tenía todos los permisos que dice en el sitio web de Phonegap. Acabo de copiar el proyecto otra vez y pegué ese código desde arriba, no sé por qué comenzó a funcionar :) – axierjhtjz

2

Tuve el mismo problema cuando configuré mi minSdkVersion dentro de AndroidManifest.xml en 7. No experimento este problema cuando uso minSdkVersion = "2".

+0

no funcionaba para mí :( – ghostCoder

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 de que la recolección de basura la recoja.

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!

+0

¿Podría agregar información sobre la versión de Phonegap que estaba usando? Solo para agregar más información al tema y soluciones. Gracias – axierjhtjz

Cuestiones relacionadas