0

我使用phonegap(2.5版)创建了一个应用程序来编辑Android手机联系人(Android 4)。一切正常,但联系人头像有问题。(头像是从手机库加载的,获取头像作为URI)

如果选择大头像(大于 1 MB),则无法更新联系人。所以我尝试将所有选择的头像自动重新调整为 400x400 像素。作为 logcat,我可以看到它写入/storage/sdcard0/Android/data/{package_name}/cache/resize.jpg但尝试保存时发生错误

E/ContactsAccessor(28252): /storage/sdcard0/Android/data/{package_name}/cache/resize.jpg?1374660687484: open failed: ENOENT (No such file or directory)
E/ContactsAccessor(10624): java.io.FileNotFoundException: /storage/sdcard0/Android/data/com.lunextelecom.m/cache/resize.jpg?1374718026949: open failed: ENOENT (No such file or directory)
E/ContactsAccessor(10624):  at libcore.io.IoBridge.open(IoBridge.java:416)
E/ContactsAccessor(10624):  at java.io.FileInputStream.<init>(FileInputStream.java:78)
E/ContactsAccessor(10624):  at libcore.net.url.FileURLConnection.connect(FileURLConnection.java:82)
...

我使用文件资源管理器检查,图像存在那里。不知道为什么它可以读取它。

我还检查并设置了READ_EXTERNAL_STORAGE权限

如果用户选择大头像,请帮助我解决此问题或任何其他更新电话联系人的解决方案。非常感谢。

这是我的获取图像代码

var options =   {   
    quality: 75,
    destinationType: Camera.DestinationType.FILE_URI,
    sourceType: 0,      // 0:Photo Library, 1=Camera, 2=Saved Photo Album
    encodingType: 0,     // 0=JPG 1=PNG
    targetWidth: 400,
    targetHeight: 400
};

navigator.camera.getPicture( function(imageData) {
    image_ctl.setSrc(imageData);
    console.log('AVARTA IMG GET'); }, function() {
    app.showAlert('Error taking picture', 'Error'); }, options);
4

1 回答 1

0

我认为您无法通过 navigator.camera.getPicture 加载图像。此功能仅适用于打开对话框以从图库中获取图像或从相机捕获照片。所以你不能将图像文件数据传输到这个函数。我知道这很烦人。

它在文档中显示:

navigator.camera.getPicture(cameraSuccess, cameraError, [cameraOptions]);

描述

camera.getPicture 函数打开设备的默认相机应用程序,允许用户拍摄照片。当 Camera.sourceType 等于 Camera.PictureSourceType.CAMERA 时,默认情况下会发生此行为。用户拍摄照片后,相机应用程序将关闭并恢复应用程序。

如果 Camera.sourceType 是 Camera.PictureSourceType.PHOTOLIBRARY 或 Camera.PictureSourceType.SAVEDPHOTOALBUM,则会显示一个对话框,允许用户选择现有图像。camera.getPicture 函数返回一个 CameraPopoverHandle 对象,该对象可用于重新定位图像选择对话框,例如,当设备方向改变时。

于 2013-09-04T19:41:07.527 回答