我正在使用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:
内容://com.android.提供商.媒体.文档/文档/图像%3A3237被白名单阻止的URL:内容://com.android.提供商.媒体.文档/文档/图像%3A3184
所以,我认为这是一个白名单问题。我添加到configiderxml文件中。但这会使应用程序在试图读取图像文件时崩溃。
我正在一个运行Android棉花糖的Karbonn手机上尝试这个。
请分享解决方案,如果你知道上面的问题是什么,还有什么我需要在这里做。
2条答案
按热度按时间ss2ws0br1#
看起来,当从像画廊这样的“媒体商店”访问图像而不使用像相机这样的“特定系统应用程序”时,普通应用程序必须拥有
android.permission.MANAGE_DOCUMENTS
权限才能访问该图像。很遗憾,普通应用程序没有此权限,如answer所述。因此,必须使用拥有
android.permission.MANAGE_DOCUMENTS
权限的“a system-app”将图库图像移动/复制到应用程序文件夹(file:///storage/emulated/0/Android/data/APP_NAMESPACE
)中,以便普通应用程序在重新启动后可以显示此图像。w46czmvw2#
FILE_URI返回base64格式而不是url。要将图像保存在电话的特定目录中,您需要使用DATA_URL而不是FILE_URI