2011-10-13 10 views
6

UPDATE --------------- ---------------PhoneGap fallimento della fotocamera quando si recuperano i dati

Sembra che there' s un qualche tipo di problema con la fotocamera HTC Desire e questa versione di PhoneGap. Il problema sembra essere il modo in cui HTC restituisce le specifiche della fotocamera su Android.

--------------- --------------- UPDATE

Ive stato utilizzando PhoneGap per riscrivere la codice della mia precedente domanda ma non ho bisogno di usare l'API della fotocamera. Quando l'ho usato su un telefono reale si è schiantato dopo aver scattato la foto e ho ricevuto questo errore 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 

Qualcuno sa perché questo accade?

Questo è il mio Camera.js

Questo è il mio 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); 
} 

Speranza che aiuta

Grazie a tutti per la via

risposta

1

------ --------- UPDATE ---------------

Sembra che ci sia un qualche tipo di problema con la fotocamera HTC Desire e questa versione di PhoneGap. Il problema sembra essere il modo in cui HTC restituisce le specifiche della fotocamera su Android.

--------------- --------------- UPDATE

Questo codice funziona bene per me, Ho solo il riferimento .js a questo codice sull'indice e un pulsante con la funzione capturePhoto().

Spero che aiuti chiunque a risolvere i loro problemi.

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

Questo è un intero gruppo di codice .. Quale parte specifica hai aggiunto per risolvere il problema? – Roel

4

Ho appena aiutato una persona con lo stesso errore nell'elenco dei numeri di PhoneGap. Credo che manchi il permesso:

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

dal file AndroidManifest.xml. Dobbiamo essere in grado di scrivere l'immagine catturata in un file .jpg.

+0

L'ho pensato all'inizio, ma avevo tutte le autorizzazioni come dice sul sito web di Phonegap. Ho appena copiato nuovamente il progetto e incollato il codice dall'alto, non so perché ha iniziato a funzionare :) – axierjhtjz

2

Ho avuto lo stesso problema quando ho impostato il mio minSdkVersion all'interno di AndroidManifest.xml su 7. Non ho riscontrato questo problema quando utilizzo minSdkVersion = "2".

+0

non funziona per me :( – ghostCoder

1

EDIT

Originariamente avevo pensato che la compensazione mia applicazione sul mio cellulare e reinstallare aver risolto il problema. Si scopre che questo non era il caso. Ho scoperto che c'è un problema in cui l'app PhoneGap è stata rimossa con la Raccolta dati obsoleti Android quando si tenta di catturare un'immagine dalla fotocamera. Dopo aver cercato per ore la soluzione con cui ho finito stava usando lo foreground camera plugin.Questo plugin crea la propria fotocamera all'interno dell'applicazione stessa in questo modo non devi preoccuparti della garbage collection che la raccoglie.

Sfortunatamente, non è completo e la maggior parte delle opzioni della fotocamera non sono disponibili per l'utente. Supporta anche Cordova 2.4.0, il che significa che ho dovuto effettuare il downgrade da 2.7.0. Questa soluzione funzionerà per la mia attuale applicazione, spero che dal prossimo che scrivo ci sarà una soluzione migliore. Spero che questo aiuti qualcuno!

+0

Puoi aggiungere informazioni sulla versione di PhoneGap che stavi usando? Solo per aggiungere più informazioni alla discussione e soluzioni. Grazie – axierjhtjz

Problemi correlati