【问题标题】:Cordova Camera iOS Issue: NOT_FOUND_ERRCordova 相机 iOS 问题:NOT_FOUND_ERR
【发布时间】:2019-12-29 05:02:53
【问题描述】:

我正在使用 cordova-plugin-camera cordova 插件(版本 4.0.3),由 Ionic 4 @ionic-native/camera@4 的 Ionic Native 包装器包装。我正在使用它来捕捉照片(常规或来自图书馆),并将其移动到我的应用程序存储区域以进行保存/发送。事情在 Android 上运行良好。在 iOS 上,当我尝试获取从捕获中返回的 FILE_URI 时,我会继续返回 NOT_FOUND_ERR

以下是我捕获图像的方式,效果很好。相机启动,我拍摄(或选择)一张照片,然后我得到一个文件 URI(file:///var/mobile/Containers/Data/Application/{guid}/tmp/XYZ.jpg)。然后像在这个生成的文件 URI 上执行 resolveLocalFilesystemUrl 这样简单的操作将使用 NOT_FOUND_ERR 进行轰炸。有什么建议吗?

const options: CameraOptions = {
  quality: 100,
  destinationType: this.camera.DestinationType.FILE_URI,
  encodingType: this.camera.EncodingType.JPEG,
  mediaType: this.camera.MediaType.PICTURE,
  sourceType: (isFromLibrary) ? this.camera.PictureSourceType.PHOTOLIBRARY : this.camera.PictureSourceType.CAMERA, 
  saveToPhotoAlbum: false,
  targetWidth: (isForDocScan) ? desiredWidth + 500 : desiredWidth,
  targetHeight: (isForDocScan) ? desiredHeight + 500 : desiredHeight
}

let result = null;
try {
  result = await this.camera.getPicture(options);
}
catch (err) {
  this.loggingService.error('Error getting photo', err);
}

【问题讨论】:

  • 是相机抛出错误还是resolveLocalFilesystemUrl??
  • resolveLocalFilesystemUrl 可以。相机捕捉似乎有效,并返回捕捉照片的文件路径。要么我无权访问提供的文件,要么它无效?
  • 你能把摄像头的uri和你怎么称呼resolveLocalFilesystemUrl吗?
  • 是的。 let originalFile = await this.file.resolveLocalFilesystemUrl(imagePath); URI 的形式为file:///var/mobile/Containers/Data/Application/{guid}/tmp/XYZ.jpg
  • 你可以试试destinationType: this.camera.DestinationType.NATIVE_URI ??

标签: ios cordova ionic-framework ionic3 cordova-plugins


【解决方案1】:

在使用 Camera.DestinationType 配置时,您似乎遇到了一些问题。以下是使用FILE_URINATIVE_URI 时的输出

Camera.DestinationType.FILE_URI

'file://' ios
'content://' android

Camera.DestinationType.NATIVE_URI

'assets-library://' ios
'content://' android

虽然这是输出,但这与您的 sourceType 内部相关。这意味着,如果您的sourceType 是相机,您应该使用FILE_URI,因为输出是从临时存储中获取的,而如果您使用的是照片库,则您的输出需要从库中获取,即这就是为什么它建议你使用NATIVE_URI

【讨论】:

  • 谢谢。我可以确认,如果我在 iOS 上使用 DestinationType.NATIVE_URI 它确实有效。 PHOTOLIBRARYCAMERA 来源似乎都需要这样做。我发誓这曾经在 iOS 上与 FILE_URI 一起工作过。也许我在不知不觉中发现了一些插件/包更改。
  • 对此的另一个说明。我发现拨打camera.cleanup() 对此产生了重大影响。实际上,只需将我的呼叫转移到camera.cleanup(),我就可以重新使用DestinationType.FILE_URI。因此,看起来这种清理在 Android/iOS 上的作用似乎有所不同,并且确实影响了 PHOTOLIBRARY 的使用,这与文档中的声明不符。
  • 但是,我认为清理的行为是正确的,因为它意味着内存管理。使用camera创建临时文件,使用base64容易出现内存泄漏,需要通过cleanup方法解决。但是,使用照片库并不是为了造成任何内存问题。
  • 文档说明仅当 Camera.sourceType 的值等于 Camera.PictureSourceType.CAMERA 且 Camera.destinationType 等于 Camera.DestinationType.FILE_URI 时才适用。。在 iOS 上,当源和目标类型不同时,我注意到清理会影响功能。所以我只是说文档似乎与我看到的不符(无论如何在 iOS 上)。
猜你喜欢
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多