在我的Android Unity插件中,我想提供对统一制作的屏幕截图的访问权限,因此可以访问Application.persistentDataPath
,这是每个文档的应用的files
文件夹......
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="files" path="."/>
</paths>
我还想读/写外部存储。但是只要我加上......
<!-- For access `DICM/Camera` -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...对于清单,Unity将屏幕截图添加到外部存储,因此FileProvider
无法从那里提供文件。
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/<PACKAGE_NAME>/files/<FILE_NAME>
如何仍然提供来自应用files
目录的文件?
答案 0 :(得分:2)
当您传入与您的配置不符的File
时,我通常会看到该消息from getUriForFile()
。
在您的提供商元数据中,您只支持getFilesDir()
(及其下方的位置)作为您愿意提供的地方。但是,您传递到File
的{{1}}对象似乎是从getUriForFile()
构建的,这不是一回事。
很遗憾,getExternalFilesDir()
无法直接访问FileProvider
。 getExternalFilesDir()
接近,文档声称它指向<external-path>
。那是a documentation bug; getExternalFilesDir()
确实指向外部存储的根(即<external-path>
)。
您的选择是:
仅针对您的内部存储文件坚持Environment.getExternalStorageDirectory()
,并对外部存储空间中的文件使用FileProvider
file://
值
根据您的应用ID,计算出Uri
值,以添加到指向外部存储特定部分的提供商元数据
使用my StreamProvider
,添加<external-path>
作为选项
推送自己的<external-files-path>
来处理此问题,而不是使用ContentProvider
或FileProvider