【问题标题】:Phonegap|Android 4 - App sometimes crashes when taking picture from PHOTOLIBRARYPhonegap|Android 4 - 从 PHOTOLIBRARY 拍照时,应用程序有时会崩溃
【发布时间】:2012-07-13 12:23:48
【问题描述】:

我使用以下代码在 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。使用相机获取照片没有问题。但是,当我多次尝试从图库中拍照时,应用程序经常崩溃(没有任何有用的错误)不是一直而是经常在不同的周期中崩溃。 (有时是第三次从图库中挑选图像,有时是第五次等等)

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

【问题讨论】:

  • 您使用的是哪个版本的 Phonegap?我已经为即将发布的 2.0.0 修复了很多相机问题。另外,运行“adb logcat”以查看来自操作系统的错误。

标签: android cordova photolibrary


【解决方案1】:

我在 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 没有问题。

【讨论】:

    【解决方案2】:

    我突然在 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 在需要更多内存时关闭打开的应用程序,例如当它打开网络摄像头时。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你不需要root设备来使用logcat,它是Android SDK的一部分。
      • 啊,我只在设备上使用过它,我认为你需要扎根。
      • 啊!我完全忘记了,您需要先单击“设备”选项卡中的设备,才能查看任何 logcat 输出...感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多