FileProvider“无法找到已配置的根”异常

这些FileProvider中又有一个迷失了灵魂……我已经在解决这个问题上超过一天了,看来我缺少了一些重要的东西。任何帮助,将不胜感激!

我正在尝试使用FileProvider发送带有附件的电子邮件。

我的AndroidManifest.xml的一部分:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="todolistj.todolist.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="lists_to_send" path="export/"/>
</paths>

创建附件:

String content = "hello world";
File file;
FileOutputStream outputStream;
try {
    File dir = context.getExternalFilesDir("export");
    if(!dir.exists()) dir.mkdir();
    file = new File(dir, "MyCache");
    if (file.exists ()) file.delete ();
    outputStream = new FileOutputStream(file);
    outputStream.write(content.getBytes());
    outputStream.close();
    return file.getAbsolutePath();
} catch (IOException e) {
    e.printStackTrace();
}

和乌里创作:

    File readF = new File(fullFileName);
Uri uri = FileProvider.getUriForFile(this, "todolistj.todolist.fileprovider", readF);

fullFileName代码段中用于文件创建的返回值在哪里

在Uri创建行上,我得到了例外:

...
Caused by: java.lang.IllegalArgumentException: Failed to find configured 
root that contains /storage/emulated/0/Android/data/todolistj.todolist/files/export/MyCache
...

如此处的文档(https://developer.android.com/reference/android/support/v4/content/FileProvider.html)所述:

<external-files-path name =“ name” path =“ path” />代表应用程序外部存储区根目录中的文件。该子目录的根路径与Context#getExternalFilesDir(String)Context.getExternalFilesDir(null)返回的值相同。

因此,我的xml中的external-files-path似乎与context.getExternalFilesDir我使用方法匹配我在两个地方都有“导出”文件夹。当局似乎匹配...可能是我的问题。我找不到找到和打印FileProvider的“配置根目录”的方法

看来我找到了解决方法或解决方法。改变我是从使用的根目录类型external-files-pathcache-path在XML和context.getExternalFilesDir("export");File dir = new File(context.getCacheDir(), "export");用于获取文件夹中创建文件。

并且我成功地附加了文件。请注意,在FileProvider类的FileProvider.java中,我发现了以下用于构造Uris的代码:

        if (TAG_ROOT_PATH.equals(tag)) {
            target = buildPath(DEVICE_ROOT, path);
        } else if (TAG_FILES_PATH.equals(tag)) {
            target = buildPath(context.getFilesDir(), path);
        } else if (TAG_CACHE_PATH.equals(tag)) {
            target = buildPath(context.getCacheDir(), path);
        } else if (TAG_EXTERNAL.equals(tag)) {
            target = buildPath(Environment.getExternalStorageDirectory(), path);
        }

看起来仅支持以下4个文件夹:TAG_ROOT_PATH,TAG_FILES_PATH,TAG_CACHE_PATH,TAG_EXTERNAL。没有TAG_EXTERNAL_FILES或类似的东西,因此这看起来像文档和实现之间的不匹配,实际上不支持external-files-pathgetExternalFilesDir方法匹配

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FileProvider“无法找到已配置的根”异常

来自分类Dev

Android:FileProvider“无法找到配置的根”

来自分类Dev

非法参数异常:无法找到配置的根

来自分类Dev

文件提供程序异常:无法找到包含以下内容的已配置根目录

来自分类Dev

IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录

来自分类Dev

IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录

来自分类Dev

如果方法无法抛出声明的已检查异常,则为错误配置 Java 编译器

来自分类Dev

Cabal配置无法在Cabal沙箱中找到已安装的软件包

来自分类Dev

setuptools警告:无法找到已配置的许可证文件“ L”

来自分类Dev

加密的ArchLinux:无法找到根设备

来自分类Dev

VS2013似乎无法正确附加-调试器已附加但未配置为调试此未处理的异常

来自分类Dev

无法回滚已检查异常的事务

来自分类Dev

节点无法找到模块(即使已安装)

来自分类Dev

人偶-无法找到已声明的班级

来自分类Dev

dlopen无法找到已分解符号

来自分类Dev

无法找到已安装的软件包

来自分类Dev

无法找到包裹?存储库已添加!

来自分类Dev

堆栈溢出异常,无法找到原因

来自分类Dev

Postgres的Hibernate异常,无法找到表

来自分类Dev

FileProvider在GetUriForFile上引发异常

来自分类Dev

全新ArchLinux安装上的“无法找到根设备”

来自分类Dev

IntelliJ + Maven错误:无法找到或加载主类根

来自分类Dev

无法从 FileProvider 保存文件

来自分类Dev

已找到预期的END B1验证配置

来自分类Dev

已配置CXF和Spring,但CXF报告“未找到服务”

来自分类Dev

Heroku无法找到XML配置文件

来自分类Dev

配置无法找到libgit2库

来自分类Dev

Heroku无法找到XML配置文件

来自分类Dev

无法访问WCF中的已处置对象异常

Related 相关文章

  1. 1

    FileProvider“无法找到已配置的根”异常

  2. 2

    Android:FileProvider“无法找到配置的根”

  3. 3

    非法参数异常:无法找到配置的根

  4. 4

    文件提供程序异常:无法找到包含以下内容的已配置根目录

  5. 5

    IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录

  6. 6

    IllegalArgumentException:无法在FileProvider.getUriForFile上找到包含xxx的配置根目录

  7. 7

    如果方法无法抛出声明的已检查异常,则为错误配置 Java 编译器

  8. 8

    Cabal配置无法在Cabal沙箱中找到已安装的软件包

  9. 9

    setuptools警告:无法找到已配置的许可证文件“ L”

  10. 10

    加密的ArchLinux:无法找到根设备

  11. 11

    VS2013似乎无法正确附加-调试器已附加但未配置为调试此未处理的异常

  12. 12

    无法回滚已检查异常的事务

  13. 13

    节点无法找到模块(即使已安装)

  14. 14

    人偶-无法找到已声明的班级

  15. 15

    dlopen无法找到已分解符号

  16. 16

    无法找到已安装的软件包

  17. 17

    无法找到包裹?存储库已添加!

  18. 18

    堆栈溢出异常,无法找到原因

  19. 19

    Postgres的Hibernate异常,无法找到表

  20. 20

    FileProvider在GetUriForFile上引发异常

  21. 21

    全新ArchLinux安装上的“无法找到根设备”

  22. 22

    IntelliJ + Maven错误:无法找到或加载主类根

  23. 23

    无法从 FileProvider 保存文件

  24. 24

    已找到预期的END B1验证配置

  25. 25

    已配置CXF和Spring,但CXF报告“未找到服务”

  26. 26

    Heroku无法找到XML配置文件

  27. 27

    配置无法找到libgit2库

  28. 28

    Heroku无法找到XML配置文件

  29. 29

    无法访问WCF中的已处置对象异常

热门标签

归档