当前位置: 首页 > 知识库问答 >
问题:

文件提供程序和辅助外部存储

颛孙凯定
2023-03-14

如何使用FileProvider从辅助外部存储器提供文件?

FileProvider的当前实现只处理ContextCompat返回的第一个目录。getExternalFilesDirs

...    
} else if (TAG_EXTERNAL_FILES.equals(tag)) {
   File[] externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null);
   if (externalFilesDirs.length > 0) {
       target = externalFilesDirs[0];
   }
}
...

看来,没有办法定义一个


共有3个答案

谷梁宁
2023-03-14

要处理位于外部SD卡上的文件,我将provider_paths.xml更改为

<paths>
    <external-path path="." name="external_files" />
    <root-path path="." name="sdcard1" />

</paths>
汪胡非
2023-03-14

FileProvider不支持辅助存储,因为下面的代码:

来自支持的代码:支持核心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中有一个特殊的标记:根路径,这在官方参考中没有涉及。

            if (TAG_ROOT_PATH.equals(tag)) {
                target = DEVICE_ROOT;// DEVICE_ROOT = new File("/");
            } else if (TAG_FILES_PATH.equals(tag)) {

所以,root路径匹配所有路径。

只需在FileProvider xml中键入此代码,FileProvider就可以处理辅助存储中的文件。

<root-path name="root" path="." />

请注意,它可能会泄漏您的目录结构。

谭毅然
2023-03-14
匿名用户

答案是<代码>文件提供程序不支持此功能。对于Android7,这是一个更大的问题,因为文件://Uri方案被弃用。

我发布了一份错误报告。

 类似资料:
  • 我正在尝试为共享文件设置文件提供程序。我的文件保存在外部存储器的“AppName”文件夹中(与Android、电影和图片文件夹的级别相同)。 以下是我的文件提供程序配置: 以及文件路径。xml: 当我试图访问我的文件: 它返回一个错误:java。lang.IllegalArgumentException:未能找到包含/storage/emulated/0/AppName/IMG_20160419_

  • 这是一个奇怪的用例,我需要一些帮助来弄清楚如何相互结合使用辅助/提供者/FactoryModuleBuilders。忽略的缺失。这只是一个例子。 属于我无法更改的库的一组特征具有以下模式。它使用蛋糕图案。 由于这些特征不能被直接注入,我创建了一个允许它们被注入的包装器 在我的代码中,我有一个依赖于服务的控制器,而服务又依赖于库。根据控制器的需要,服务应能够使用“BB”或“CC”。组件如下所示 我将

  • 我知道很多问题已经被回答了,但是在我的例子中,我的代码在Oppo、三星手机上运行正常,但是在MI、MOto G、Lenavo手机上不能运行 下面是我的代码:

  • 我正试图在应用程序处于退出状态时从firebase保存一个通知到redux。 但是我需要在app.js中这样做,当我甚至不在组件上时,我如何分派redux操作呢? 这就是我要做的

  • 文件辅助函数文件包含若干对文件进行操作的函数。 加载 使用以下代码:$this->load->helper('file'); 加载后可用以下函数: read_file('path') 返回路径为path的文件内容。例:$string = read_file('./path/to/file.php'); 可以是相对或者绝对的服务器的路径。如果函数执行失败则返回 FALSE(boolean类型)。 提

  • 文件辅助函数文件包含了一些帮助你处理文件的函数。 加载辅助函数 可用函数 加载辅助函数 该辅助函数通过下面的代码加载: $this->load->helper('file'); 可用函数 该辅助函数有下列可用函数: read_file($file) 参数: $file (string) -- File path 返回: File contents or FALSE on failure 返回类型