art*_*nig 7 android android-external-storage android-fileprovider
如何使用FileProvider?提供来自SECONDARY外部存储的文件?
FileProvider句柄的当前实现只返回第一个目录ContextCompat.getExternalFilesDirs
...
} else if (TAG_EXTERNAL_FILES.equals(tag)) {
File[] externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null);
if (externalFilesDirs.length > 0) {
target = externalFilesDirs[0];
}
}
...
Run Code Online (Sandbox Code Playgroud)
看来,没有办法为匹配辅助外部存储路径的<path>条目定义FileProvider...
由于以下代码,FileProvider 不支持二级存储:
来自 support: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)) {
Run Code Online (Sandbox Code Playgroud)
但是,在 FileProvider 中有一个特殊的 TAG:root-path,官方参考中没有提到。
if (TAG_ROOT_PATH.equals(tag)) {
target = DEVICE_ROOT;// DEVICE_ROOT = new File("/");
} else if (TAG_FILES_PATH.equals(tag)) {
Run Code Online (Sandbox Code Playgroud)
因此,root-path 匹配所有路径。
只需在您的 FileProvider xml 中键入此代码,FileProvider 就可以处理二级存储中的文件。
<root-path name="root" path="." />
Run Code Online (Sandbox Code Playgroud)
请注意,它可能会泄漏您的目录结构。
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |