【问题标题】:Using FileProvider cache-path for gmail attachment shows "invalid" error对 gmail 附件使用 FileProvider 缓存路径显示“无效”错误
【发布时间】:2017-02-28 17:32:51
【问题描述】:

我想通过 gmail 或其他电子邮件应用发送存储在应用内部缓存中的文本文件。我添加了 FileProvider 以授予对文件的一次性访问权限。

当我在装有 Android 5.0 的设备上运行我的应用程序时,它可以工作。当我在 6.0 的设备上运行它时,它失败了。一个失败就是一个例外:

未找到处理 Intent 的 Activity { act=android.intent.action.SEND flg=0x3 clip={null T:Log file attach.}(有额外内容)}

当我省略 intent.setDataAndType (uri, "text/plain") 时会发生这种情况。

如果我确实包含了上面的语句,另一个失败是来自 gmail 的错误。它显示了带有图形的附件文件名,使我相信它可以正确访问它。它还在“to”行中显示附件的路径 - 本质上是 uri,但缺少“file:”前缀。如果我尝试发送消息,它会给我一条错误消息:“地址无效。”如果我从“收件人”行中删除这个虚假地址,我可以成功发送带有附件的邮件。

换句话说,我对 FileProvider 的使用,包括各种“设置”文件,似乎都在工作。我显然在某个地方有问题,也许是在 Intent 用法中。这是我的代码 - 带有虚假“收件人”地址的后一个版本。

清单:

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

filepaths.xml(在 res/xml 目录中):

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <cache-path path="./" name="files" />
</paths>

创建意图的代码:

  public static void sendFile (Context context, String path)
  {
    File file = new File (path);
    Uri uri = FileProvider.getUriForFile (context, "com.myapp.file_access", file);

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.putExtra (Intent.EXTRA_EMAIL, new String[] {"you@gmail.com"});
    intent.putExtra (Intent.EXTRA_SUBJECT, "your file");
    intent.putExtra (Intent.EXTRA_STREAM, uri);
    intent.putExtra (Intent.EXTRA_TEXT, "file attached.");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    intent.setDataAndType (uri, "text/plain");
    context.startActivity (intent);
  }

【问题讨论】:

    标签: android gmail android-fileprovider


    【解决方案1】:

    不确定 9 个月后是否仍有答案。

    1. 数据类型应为“message/rfc822”
    2. gmail 的附件仅在文件位于外部存储“mnt/card/{your_file_path}”时可用,对于任何其他文件路径,gmail/inbox 应用程序无法识别

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多