0

我使用以下代码在 Phonegap (cordova 1.9.0) 中获取来自画廊或相机的照片并将其包含在页面中:

function getPhotoByGallery() {
    navigator.camera.getPicture(onPhotoSuccess, onFail, {
        quality : 50,
        destinationType: navigator.camera.DestinationType.FILE_URI,
        sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
    });
}

function getPhotoByCamera() {
    navigator.camera.getPicture(onPhotoSuccess, onFail, {
        quality : 50
    });
}

function onPhotoSuccess(data) {
    var viewport = document.getElementById('viewport');
    //console.log(data);
    viewport.style.display = "";
    document.getElementById("test_img").src = data;
}

测试设备:搭载 Android 4 的三星 Galaxy S3。用相机获取照片没问题。但是,当我多次尝试从图库中拍照时,应用程序经常崩溃(没有任何有用的错误)不是一直而是经常在不同的周期中崩溃。(有时是第三次从图库中挑选图像,有时是第五次,以此类推)

我不知道问题的原因可能是什么,因为该应用程序没有给我它遇到的问题的任何反馈......

4

3 回答 3

0

我遇到同样的问题 2 天,直到我发现您应该有权获取您在设备中拍摄的图像文件的权限。默认情况下,没有返回图像的权限,因此它返回 null 并且您的应用程序崩溃。

如果您在 XCode 中使用 Cordova/PhoneGap,那么您还应该在 www 文件夹中创建 Config.xml 文件并授予访问图像文件的权限。

<feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/battery"/>
<feature name="http://api.phonegap.com/1.0/camera"/>
<feature name="http://api.phonegap.com/1.0/contacts"/>
<feature name="http://api.phonegap.com/1.0/file"/>
<feature name="http://api.phonegap.com/1.0/geolocation"/>
<feature name="http://api.phonegap.com/1.0/media"/>
<feature name="http://api.phonegap.com/1.0/network"/>
<feature name="http://api.phonegap.com/1.0/notification"/>

如果您使用的是 Android,请授予 AndroidManifest.xml 文件的权限。

您可以在此处找到 config.xml 文件的所有内容: https ://build.phonegap.com/docs/config-xml

Cordova/PhoneGap 没有问题。

于 2012-10-19T10:12:50.800 回答
0

我突然在 Android 4(三星 Galaxy III)和 PhoneGap 2.0(通过 PhoneGap Build 构建)上运行的应用程序遇到了同样的问题。

附带说明一下,唯一需要的权限是:

<feature name="http://api.phonegap.com/1.0/camera"/>
<feature name="http://api.phonegap.com/1.0/file"/>

我已经设置了(它适用于 Android 2.2 手机)。

更新 经过进一步测试,事实证明这个问题是众所周知的问题,Android 在需要更多内存时关闭打开的应用程序,例如当它打开网络摄像头时。

于 2012-10-24T10:41:36.633 回答
-1

设备是否已植根?如果是这样,您可以使用 logcat 程序(例如 alogcat)来尝试帮助。

于 2012-07-13T12:25:52.037 回答