我如何使用 FileProvider
提供辅助外部存储中的文件? ?
当前执行 FileProvider
仅处理 ContextCompat.getExternalFilesDirs
返回的第一个目录
...
} else if (TAG_EXTERNAL_FILES.equals(tag)) {
File[] externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null);
if (externalFilesDirs.length > 0) {
target = externalFilesDirs[0];
}
}
...
似乎没有办法定义 <path>
FileProvider
的条目, 匹配辅助外部存储路径...
最佳答案
由于以下代码,FileProvider 不支持辅助存储:
来自支持的代码:support-core-utils:26.1.0 FileProvider
} else if (TAG_EXTERNAL_FILES.equals(tag)) {
File[] externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null);
if (externalFilesDirs.length > 0) {
target = externalFilesDirs[0];// Code here, That's why!!!
}
} else if (TAG_EXTERNAL_CACHE.equals(tag)) {
不过,FileProvider中有一个特殊的TAG:root-path,官方没有提及。
if (TAG_ROOT_PATH.equals(tag)) {
target = DEVICE_ROOT;// DEVICE_ROOT = new File("/");
} else if (TAG_FILES_PATH.equals(tag)) {
因此,root-path 匹配所有路径。
只需在您的 FileProvider xml 中键入此代码,然后 FileProvider 就可以处理辅助存储中的文件。
<root-path name="root" path="." />
请注意,它可能会泄露您的目录结构。
关于android - FileProvider 和二级外部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40318116/