使用FileProvider缓存路径显示gmail附件"无效"错误

时间:2017-02-28 17:32:51

标签: android gmail android-fileprovider

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

当我在使用Android 5.0的设备上运行我的应用时,它可以工作。当我在6.0的设备上运行它时,它会失败。一个失败是一个例外:

  

找不到处理Intent的活动{act = android.intent.action.SEND   flg = 0x3 clip = {null T:附加日志文件。}(有附加内容)}

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

如果我确实包含上述​​语句,则另一个失败是来自gmail的错误。它显示附件文件名称和图形,使我相信它正确访问它。它还表明,在" to" line,附件的路径 - 基本上是uri,但缺少"文件:"字首。如果我尝试发送消息,它会给我一条错误消息:"地址无效。"如果我将此虚假地址从"删除到"我可以通过附件成功发送邮件。

换句话说,我对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);
  }

1 个答案:

答案 0 :(得分:0)

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

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