Cordova相机即使为false也保存到图库

14

我处于一个非常困难的情况......

我的客户要求使用Ionic Framework v1中的Cordova应用程序,并且必须确保相机不保存图像到相册。然而,当我将保存到相册的参数设置为false时,它仍然会保存到相册。

该问题出现在Android系统上,当您拍照并取消时,它会将该图片保存到相册,有时甚至保存之后拍摄的所有其他照片。

我真的需要任何形式的帮助;到目前为止,我找到了一些解决方案,但由于我对Java的了解为零,因此很难理解。

以下是我的JS代码:

function capturePhoto() {
    var maxDimension = 1280;
    var options = {
      quality: 80,
      destinationType: Camera.DestinationType.DATA_URL,
      sourceType: Camera.PictureSourceType.CAMERA,
      correctOrientation: true,
      targetWidth: maxDimension,
      targetHeight: maxDimension,
      saveToPhotoAlbum: false

    };

这是有关相机选项的内容。

 $cordovaCamera.getPicture(options).then(function (imageData) {
      var src = "data:image/jpeg;base64," + imageData;
      $scope.photoPreviewSrc = src;
    }).catch(function (err) {

    });
  }

我有点困惑 - 如果你正在开发 Cordova 应用程序,Java 又是在哪里发挥作用的呢? - EJoshuaS - Stand with Ukraine
3
插件是用Java编写的,用于Android...所以可能有Java知识的人已经解决了这个问题。 - revan1990
我已经验证了相同的问题,但它按预期工作。我已将saveToGallery标志设置为true。如果我取消,则图像不会保存。当我点击确定时,图像将保存到图库中。 - bvakiti
@bvakiti 如果你将 saveToGallery 设置为 false,然后拍摄照片并取消它会发生什么? - revan1990
你能展示一下你使用的代码吗?你能更具体地说明一下问题吗? - bvakiti
我更新了我的问题并附上了JS代码。 - revan1990
3个回答

2

我使用cordova检查了你的代码。它按预期正常工作。 请在其他设备上验证您的应用程序。

我还没有在ionic平台上检查过它。


1
当您将savetogallery设置为false并在拍摄照片后取消时,您不会将其保存到图库中? - revan1990
不,当您取消时,它会再次显示相机以进行捕获。图像未保存在画廊中。请在其他设备上验证一次。 - bvakiti
3
我验证了普通的 Cordova 应用程序,它按预期工作,并且使用相同的代码。 - bvakiti
1
@bvakiti 这告诉我问题出在 Ionic 平台上。请继续编辑您的问题以澄清此问题。 - Cullub
刚刚尝试了普通的 Cordova 代码 navigator.camera.getPicture,而不是 $cordovaCamera.getPicture...仍然遇到同样的问题...我会尝试检查其他版本并在这里更新。 - revan1990

0

它真的会进入相册,还是只会在Android的照片应用程序中显示? Android默认的照片浏览器将显示所有照片、截屏等。它甚至会显示随机图像-其他应用程序可能存在于文件系统中但不是照片。

由于在cordova中,您无法对操作系统进行很好的控制,因此可以使用解决方法:您可以将图像放置在隐藏目录中(以 . 开头,例如 .appdata ),这将防止Android自动从“相册”应用程序中查看图像。我在Ionic App中遇到了这个问题,并通过这种方式解决了它。


他正在将图像存储到 storage/emulated/0/DCIM/Camera。你是如何通过更改图像路径来实现这个解决方案的?能给我一些提示吗? - revan1990
如果您想要隐藏它们,您可以将它们放在/storage/emulated/sdcard/.mdir或类似的位置。 - EdH

0
你可以在收到图像数据后尝试运行类似以下的内容:
navigator.camera.cleanup(onSuccess, onFail);

function onSuccess() {
    console.log("Camera cleanup success.")
}

function onFail(message) {
    alert('Failed because: ' + message);
}

来自文档:“camera.cleanup()会删除在调用camera.getPicture后保存在临时存储中的中间图像文件。仅适用于Camera.sourceType等于Camera.PictureSourceType.CAMERACamera.destinationType等于Camera.DestinationType.FILE_URI的情况。”

以上内容直接与您的使用情况相关。


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