2011-10-13 17 views
6

--------------- UPDATE ---------------检索数据时的PhoneGap相机失败

似乎there'这是HTC Desire相机和Phonegap版本的一些问题。这个问题似乎是HTC在Android上返回相机规格的方式。

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

从来就一直使用的PhoneGap重写我以前的应用程序的代码,但不是我需要使用相机API。当我在真正的手机上使用它时,它在拍摄照片后崩溃,并且发生了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 

有没有人知道为什么会发生这种情况?

这是我Camera.js

这是我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); 
} 

希望它可以帮助

感谢所有的方式

回答

1

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

似乎there's某种与HTC Desire的相机问题,这个版本的PhoneGap的。这个问题似乎是HTC在Android上返回相机规格的方式。

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

此代码工作对我很好,我只有索引上的这个代码的.js引用和一个带有capturePhoto()函数的按钮。

希望它可以帮助任何人解决他们的问题。

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

这是一大堆代码..您添加了哪些特定部分来解决问题? – Roel

4

我刚刚帮助PhoneGap问题列表中发生同样错误的人。我相信你缺少权限:

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

从你的AndroidManifest.xml文件中。我们需要能够将捕获的图像写入.jpg文件。

+0

我在开始时就这么认为,但我拥有像在Phonegap网站上所说的所有权限。我刚刚复制了项目并粘贴了上面的代码,不知道为什么它开始工作:) – axierjhtjz

2

我有同样的问题,当我的AndroidManifest.xml中设置我的minSdkVersion至7时,我使用的minSdkVersion =“2”我不会遇到这个问题。

+0

不适用于我:( – ghostCoder

1

编辑

我原本以为我的手机,并重新安装它已经解决了该问题上清除我的应用程序。事实证明情况并非如此。我发现在尝试从相机抓取图像时,PhoneGap应用程序与Android垃圾收集一起被删除的问题。搜索了几个小时后,我最终选择的解决方案是使用foreground camera plugin。这个插件在应用程序本身内部创建了自己的相机,这样你就不必担心垃圾收集。

不幸的是,它的功能并不全面,大部分相机选项都无法提供给用户。它也只支持科尔多瓦2.4.0,这意味着我不得不从2.7.0降级。这个解决方案将适用于我当前的应用程序,希望下一个我写的将有更好的解决方案。希望这可以帮助别人!

+0

)您可以添加有关您使用的Phonegap版本的信息吗?只需向该线程添加更多信息并解决方案。谢谢 – axierjhtjz