为什么 FileProvider 在使用 READ_EXTERNAL_STORAGE 权限时也会失败?
Why FileProvider fails when using READ_EXTERNAL_STORAGE permission as well?
在我的 Android Unity 插件中,我想提供对 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
目录 的文件?
当您传入与您的配置不匹配的 File
时,我通常会看到 from getUriForFile()
出现该消息。
在您的提供商元数据中,您仅支持 getFilesDir()
(及其下方的位置)作为您愿意提供服务的位置。但是,您传递给 getUriForFile()
的 File
对象似乎是从 getExternalFilesDir()
构建的,这不是一回事。
遗憾的是,FileProvider
不提供对 getExternalFilesDir()
的直接访问。 <external-path>
接近,文档声称它指向 getExternalFilesDir()
。即a documentation bug; <external-path>
真正指向外部存储的根目录(即 Environment.getExternalStorageDirectory()
)。
您的选择是:
仅对内部存储文件坚持 FileProvider
,对外部存储文件使用 file://
Uri
值
根据您的应用程序 ID
计算出一个 <external-path>
值以添加到您的提供商元数据中,该值指向您的外部存储的特定部分
使用my StreamProvider
,添加<external-files-path>
作为选项
使用自己的 ContentProvider
来处理这个问题,而不是使用 FileProvider
或 StreamProvider
在我的 Android Unity 插件中,我想提供对 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
目录 的文件?
当您传入与您的配置不匹配的 File
时,我通常会看到 from getUriForFile()
出现该消息。
在您的提供商元数据中,您仅支持 getFilesDir()
(及其下方的位置)作为您愿意提供服务的位置。但是,您传递给 getUriForFile()
的 File
对象似乎是从 getExternalFilesDir()
构建的,这不是一回事。
遗憾的是,FileProvider
不提供对 getExternalFilesDir()
的直接访问。 <external-path>
接近,文档声称它指向 getExternalFilesDir()
。即a documentation bug; <external-path>
真正指向外部存储的根目录(即 Environment.getExternalStorageDirectory()
)。
您的选择是:
仅对内部存储文件坚持
FileProvider
,对外部存储文件使用file://
Uri
值根据您的应用程序 ID
计算出一个 使用my
StreamProvider
,添加<external-files-path>
作为选项使用自己的
ContentProvider
来处理这个问题,而不是使用FileProvider
或StreamProvider
<external-path>
值以添加到您的提供商元数据中,该值指向您的外部存储的特定部分