Cordova相机插件在使用文件URI从图库中选择时总是返回相同的图像

6
升级到最新的cordova相机库0.3.4后,从图库选择图片后我能够获取真实的图像URI,返回的文件称为pic.jpg,但是如果我选择另一张图片,它将返回相同名称的相同图片pic.jpg,所以我被困在了同一张图片上 :(
图片路径看起来像是file:///storage/emulated/0/android/data/app/cache/.pic.jpg
有什么想法吗?
参考链接:https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java
$scope.getPhoto = function() {
        // Retrieve image file location from specified source
        navigator.camera.getPicture($scope.processImageUri, $scope.onFail, {
            quality: 88,
            correctOrientation: true,
            encodingType: Camera.EncodingType.JPEG,
            destinationType: navigator.camera.DestinationType.FILE_URI,
            sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY,
            allowEdit: true
        });

你遇到了同样的问题吗?你解决了吗? - Clawish
同样遇到了这个问题。如果您有解决方案,我很乐意听取。 - Kevin Ward
尝试更新相机插件,我认为这个问题在最新版本中已经修复了。 - user1883793
2个回答

2
我在iOS平台(iOS 10.2)上也遇到了这个问题。我不想使用移动到DATA_URI的解决方案,因为我在iOS和Android之间使用相同的代码,并且只想保留FILE_URI方法。
我开始调试并发现这是因为在获取图片后调用清理函数导致的。由于在清理调用中文件从临时存储中删除,插件会将相同的文件名赋给下一个可用的图片。逻辑上应该没问题,但是这里的Web视图却很恶劣,从其缓存中选择旧图像,因为URL与先前相同。
我提出了一个小修补程序。经过测试,在我的情况下它运行良好。
我已经分叉了相机插件存储库并修改了生成临时文件名的方法。
我错过了父存储库的指南,我的提交不符合要求的格式,所以我想我的拉取请求将被拒绝。(我会在有时间的时候更新并重新创建它)。
但是现在,除非您计划删除/添加平台(这可能会从主存储库克隆并丢失更改),否则可以尝试此解决方案。

1
干得好。谢谢你,这节省了我一些调试时间!我已经成功地在JS中修补了这个问题,通过向插件返回的Image URI添加一个时间戳,像这样:imageURI += '?' + +new Date(); - 运行良好,仍然可以使用当前的主版本。 - Ralpharoo
聪明的做法。我考虑了一下,但随后我想建议对插件本身进行修复,所以我对其进行了修改。不幸的是,到目前为止,我的拉取请求还没有得到回应。 - devilzk83

0

在你的函数后面编写这些代码,并用我的“destinationType:”替换你的

  function capturePhoto()
 {
      // Take picture using device camera and retrieve image as base64-encoded string
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
        destinationType: destinationType.DATA_URL });
    }


1
你应该写上 onPhotoDataSuccess - Eshan Chattaraj
根据文档,“DATA_URL可能会占用大量内存,导致应用程序崩溃或内存不足错误。如果可能,请使用FILEURI或NATIVE_URI”。 - João Pimentel Ferreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接