Phonegap|Android 4 - 从 PHOTOLIBRARY 拍照时,应用程序有时会崩溃

Posted

技术标签:

【中文标题】Phonegap|Android 4 - 从 PHOTOLIBRARY 拍照时,应用程序有时会崩溃【英文标题】:Phonegap|Android 4 - App sometimes crashes when taking picture from 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”以查看来自操作系统的错误。 【参考方案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 输出...感谢您的回答。

以上是关于Phonegap|Android 4 - 从 PHOTOLIBRARY 拍照时,应用程序有时会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在phonegap上使用GCM处理android中的多个推送通知

如何在phonegap中的按钮上添加功能?

Phonegap Facebook 插件 - 从 Android 设备中删除应用程序后密钥哈希无效

Phonegap 2.5.0 地理定位不适用于 android 4.0.4

Phonegap 和 Android 4.4.2 白名单不起作用

Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台