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

2024-01-08

这些 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>

文件路径.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();
}

以及 Uri 的创建:

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

where 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 https://developer.android.com/reference/android/support/v4/content/FileProvider.html) 状态:

表示应用程序外部存储区域根目录中的文件。该子目录的根路径与返回值相同 通过 Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)。

所以我的 xml 中的外部文件路径似乎与context.getExternalFilesDir我正在使用的方法。 这两个地方都有“导出”文件夹。当局似乎很匹配......我的问题可能是什么。我发现无法找到并打印 FileProvider 的“配置根目录”


看来我找到了解决方法或修复。 更改我使用的根目录类型external-files-path to cache-path在 xml 中和来自context.getExternalFilesDir("export"); to 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-path匹配的getExternalFilesDir不支持该方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FileProvider“无法找到配置的根”异常 的相关文章

随机推荐

  • C++ SQL数据库比较[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 合并特定日期范围内的 Pandas DataFrame

    我有 2 个数据框 一个为Invoice Data另一个用于Promotion Dates Invoice Data数据框 LocationNo InvoiceDate InvoiceAmount A 01 Jul 20 79 B 01 J
  • 在 Firefox 中的新选项卡中打开链接

    我正在开发一个 Firefox 扩展 如何才能在新标签页中打开网页上的所有链接 这通常是 Firefox 中处理新链接的可配置选项 因此它们可能会用它覆盖您的扩展 然而 The code a href http www example co
  • Django自递归外键过滤器查询所有子项

    我有一个带有自引用外键关系的模型 class Person TimeStampedModel name models CharField max length 32 parent models ForeignKey self null Tr
  • ios UIImage 超出 UIImageView 边框

    这里黑色边框显示 UIImageView 的父 UIView 红色边框显示 UIImageView 我正在从服务器下载图像 但图像超出了 UIImageView 区域 如图所示 我正在以编程方式进行此操作 任何帮助将不胜感激 我在下面添加代
  • C# FTP,如何检查路径是文件还是目录?

    我有一个包含一些 FTP 路径的数组 如下所示 ftp ip 目录 目录1 ftp ip 目录 目录2 ftp ip 目录 文件 txt ftp ip 目录 directory3 ftp ip 目录 another file csv 如何确
  • 标准 C 中是否有推荐的整数类型来存储函数指针

    C99标准有uintptr t 一个推荐的整数类型 用于将数据指针 指向对象的指针 转换为 但我没有找到等效的整数类型来存储函数指针 是我忽略了吗 特定的编译器可以定义这样的类型 即使它不在标准中 但编译器更有可能声明函数指针可以存储在 例
  • 圆形鱼眼图像扭曲为平面图像

    截至 2015 年 11 月 12 日更新 我将 PanoTools 插件与 Photoshop 和 Hugin 一起使用 并使用了所有这些参数 最终我找到了满足我最低要求的投影 HFOV 和图像输出尺寸参数 参数 Processed Ou
  • ActiveX (COM) 控件在被其父控件关闭时进行清理的正确方法是什么?

    我遇到的问题是 我的 net 控件在包装以供 ActiveX 使用时无法正确清理 当我尝试关闭 SDK 的测试容器应用程序 TstCon32 exe 时 默认行为会使它作为无 GUI 进程运行 我最初通过谷歌找到的解决方法是覆盖 WndPr
  • 在 Ruby 中反转哈希值

    我如何反转哈希中的元素 保持相同的值和键 但反转它们在哈希中的顺序 Like so 4 gt happiness 10 gt cool lala gt 54 1 gt spider 并将其转换为 1 gt spider lala gt 54
  • PHP 在文本区域中回显时显示 \r\n 字符

    我的数据正在读取从数据库 文本 保存的数据 我的问题是它也有这些字符 r n 我怎样才能阻止这些字符的显示 在将数据库文本放入文本区域之前 调用 nl2br 函数作为参数 r n 字符是 ASCII 不可见 字符 编码回车和换行 http
  • Android 主屏幕小部件(图标、标签 - 样式)

    我正在尝试创建一个可以放置在 Android 主屏幕上的图标 小部件 1 个单元 x 1 个单元 该小部件的外观和行为与 Android 中的其他标准快捷方式完全相同 它将有一个图标 在该标签下有一个标签 可以使用轨迹球 可突出显示 选择它
  • Web 应用程序和 API 在同一个 Laravel 项目中?

    我正在尝试找出构建我即将开始的新项目的最佳方法 我们目前有一个网络应用程序和一个移动应用程序 它们都通过 API 提供数据 目前 Web 应用程序是在安装 CodeIgniter 时完成的 而 API 是在单独安装 CodeIgniter
  • webview 从输入字段打开相机,无需文件选择器

    我的个人应用程序快完成了 就是按下输入字段 用相机拍照并将其上传到外部php服务器 最后一部分工作正常 我只是无法让它按照我想要的方式工作 当我按下网络视图 外部源 中的输入字段时 我会看到名为 图像选择器 的菜单 其中包含选项 相机和文档
  • 访问目标函数 Gekko 外部函数中的决策变量值

    我需要访问目标函数之外的决策变量 我有以下内容 tc var for index in index f a tc var index m Var value 25 name tc var format index lb 15 ub 45 i
  • PdfWriter 和事件

    我想创建一个 PdfWriter 对象并设置页眉和页脚事件 问题是 如果我创建一个新的 PDF 它就会起作用 但我的问题是我的输出流中已经有一个 PDF 请在下面找到我的示例代码 Document document new Document
  • Magento - 无法将产品添加到管理面板后端的手动订单中

    我遇到一个问题 当我在 Magento 1 4 1 1 的管理面板中创建订单时 我可以启动订单 选择客户 然后选择语言 它会加载所有信息 但是当我去时到 添加产品 我可以打开它并选择产品 但是当我单击 将所选产品添加到订单 时 它会短暂显示
  • 在尊重括号的同时用逗号分割列表中的字符串

    我有一个清单 例如 a john is great paul school robert jack john 然后我正在构建一个空列表来附加分割 b 然后我这样做 for i in a b append i split 但列表是这样出现的
  • 如何防止鼠标监听器暂时出现在窗口上?

    我正在用 Java 编写一个游戏 这是我试图做得 漂亮 的第一个游戏 这款游戏名为 Bantumi 这是一款棋盘游戏 现在我正在为动作编写动画 问题是 当运动动画运行时 板仍然会获取鼠标事件 如果用户选择新的运动 则正在运行的运动将被丢弃
  • FileProvider“无法找到配置的根”异常

    这些 FileProvider 又一个失去了灵魂 我已经在这个问题上工作了一天多了 看来我错过了一些大东西 任何帮助 将不胜感激 我正在尝试使用 FileProvider 发送带有附件的电子邮件 我的 AndroidManifest xml