代码之家  ›  专栏  ›  技术社区  ›  Peri Hartman

android getUriForFile对于外部\u files\u路径失败

  •  0
  • Peri Hartman  · 技术社区  · 8 年前

    *新建信息* 单步进入FileProvider代码,我看到 外部文件路径 不是真正植根于 /存储/模拟/0/ 但在 /存储/模拟/0/Android/数据/com。佩里诺。Pernote/文件/ 因此,我提出了一个问题,如何在外部存储/DCIM中共享文件?


    我正在将一个“外部”文件传递给Intent,并获取一个“IllegalArgumentException:未能找到包含以下内容的配置根…”错误

    不知道少了什么。对“缓存”文件执行类似操作也很有效。

    这是我清单的提供者部分:

        <provider
          android:name="android.support.v4.content.FileProvider"
          android:authorities="com.perinote.image_access"
          android:grantUriPermissions="true"
          android:exported="false">
            <meta-data
              android:name="android.support.FILE_PROVIDER_PATHS"
              android:resource="@xml/filepaths" />
        </provider>
    

    “filepath.xml”文件:

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
      <external-files-path
        path="DCIM/Perinote/" name="images" /> <!-- must be same as ImageData.getPerinoteDirectory -->
    </paths>
    

    还有代码片段,其中“file”是所讨论的文件名(无路径):

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType ("plain/text");
    intent.putExtra (Intent.EXTRA_EMAIL, new String[] {address});
    intent.putExtra (Intent.EXTRA_SUBJECT, subject);
    intent.putExtra (Intent.EXTRA_TEXT, body);
    Uri uri = FileProvider.getUriForFile (getContext (), "com.perinote.image_access", file);
    intent.putExtra (Intent.EXTRA_STREAM, uri);
    intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags (Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult (intent, ACTIVITY_REQUEST_SEND_EMAIL);
    

    getUriForFile()中出现故障。

    当我在设备上使用文件管理器应用程序时,文件肯定在DCIM/pernote下/

    例如,使用调试器, 文件 为“IMG\U 20171130\U 204015.jpg”。 和打开 探索者 Windows上的窗口显示路径

    此电脑\Moto G(4)\Internal shared storage\DCIM\PerNote

    文件将显示在下面的列表中。

    1 回复  |  直到 8 年前
        1
  •  2
  •   greenapps    8 年前

    你应该从改变开始 <external-files-path <external-path.