【问题标题】:cordova unable to open fileURL returned by camera plugin after application restarted应用程序重新启动后,cordova 无法打开相机插件返回的 fileURL
【发布时间】:2018-02-27 05:43:01
【问题描述】:

我使用的是 cordova 7.0.1 版和 cordova-plugin-camera 2.4.1 版。 navigator.camera.getPicture(successFunction, failureFunction,options) 在选项中,我使用

destinationType: Camera.DestinationType.FILE_URI
sourceType: Camera.PictureSourceType.PHOTOLIBRARY

我正在正确获取图像 URI。 我创建了一个“img”元素并将 img.src 设置为插件返回的 URI 图片正确显示。 现在,我将此 URI 存储在应用程序的本地文件夹中,然后关闭应用程序。 我重新启动应用程序,并从存储中读取 imageURI。 然后,我创建一个“img”元素并将 img.src 设置为 URI 读取表单存储。

从存储中读取的 URI 与之前相机插件 getPicture() 调用返回的 URI 相同。 但是,图像文件没有被读取,图片也没有出现在屏幕上。我看到的错误是 无法打开内容 URL:

content://com.android.providers.media.documents/document/image%3A3237 被白名单屏蔽的网址:content://com.android.providers.media.documents/document/image%3A3184

所以,我认为这是一个白名单问题。我添加了 进入 config.xml 文件。但这会使应用在尝试读取图像文件时崩溃。

我正在运行 Android Marshmallow 的 Karbonn 手机上尝试这个。

如果您知道上述问题有什么问题,请分享解决方案,我还需要在这里做什么。

【问题讨论】:

  • 在使用 Camera.DestinationType.FILE_URI 时,相机默认将图像存储在 android 的缓存文件夹和 ios 的 tmp 文件夹中。据我所知,有时会清除带有 ios 的 tmp(临时)文件夹,尤其是在重新启动后,因此对于 android 可能会出现类似的问题。您是否尝试将图像移动到您的应用程序文件夹(file:///storage/emulated/0/Android/data/YOUR_APP_NAMESPACE_H‌​ERE)并在重新启动后在那里读取?
  • 感谢您的回答,Blauharley。但是 - 我认为这不是我遇到问题的原因。我没有用相机拍摄新照片(sourceType:camera)。我正在使用该插件从照片库(sourceType:photolibrary)中获取图像。而且我可以看到文件名(URI)不是“缓存”,而是在手机的“内容”文件夹中。
  • 好的,对不起......我也有类似的问题,并通过在文件可以保存在那里之前向某个文件夹(window.requestFileSystem)发出请求来解决它。在创建 img 元素之前您是否已经尝试过?
  • 感谢您的建议。但是,这也不是问题。我不是要保存文件。该文件已存在于智能手机的图库中。相机插件的 PHOTOLIBRARY 选项只为已经可用的图像文件返回一个 FILE_URI。当插件返回 FILE_URI 时,我可以在屏幕上看到图像。我的问题是 - 当我保存相同的 URI 并在重新启动应用程序后再次使用它时,图像不会显示在屏幕上。在这两种情况下,我都不会自己打开文件。我只是在 javascript 中设置了 img.src = FILE_URI。
  • 另一个观察 - 我确实看到了一条消息 - 09-21 03:15:23.765 1184-1991/? W/ActivityManager: Permission Denial: 从 ProcessRecord{56c596e 5017:com.adsengg.skinsight/u0a118} (pid=5017, uid=10118) 打开提供程序 com.android.providers.media.MediaDocumentsProvider 需要 android.permission.MANAGE_DOCUMENTS 或 android。 permission.MANAGE_DOCUMENTS - 这似乎表明这是一个权限问题。这就是为什么最初我尝试添加到白名单但未成功 - 我不知道专门向白名单中的照片库文件夹添加权限的语法是什么

标签: android cordova camera cordova-plugins whitelist


【解决方案1】:

似乎在不使用相机等“某个系统应用”的情况下从“媒体商店”(如画廊)访问图像时,普通应用必须持有android.permission.MANAGE_DOCUMENTS 权限才能访问该图像.

不幸的是普通应用没有此权限,正如answer 所说。因此,必须使用拥有android.permission.MANAGE_DOCUMENTS-permission 的“系统应用程序”将图库图像移动/复制到应用程序文件夹 (file:///storage/emulated/0/Android/data/APP_NAMESPACE) 中,以便普通应用程序可以在重新启动后显示此图像例如。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多