使用FileProvider附件将意图添加到电子邮件中的杂散文件路径

时间:2016-03-30 14:49:11

标签: android android-intent android-fileprovider

我有一个意图,使用FileProvider从内部文件存储读取我的应用程序通过电子邮件(或类似的应用程序)发送文件。代码在任何地方都很有效,除了Gmail之外,Gmail奇怪地将提供商路径本身的版本添加到电子邮件的收件人列表中。

这是产生意图的代码:

public static Intent getSendIntent(Uri uri) {
    final Intent i = new Intent(Intent.ACTION_SEND);
    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    i.setDataAndType(uri, "message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL, new String[] { "my@email.com" });
    i.putExtra(Intent.EXTRA_SUBJECT, "Export");
    i.putExtra(Intent.EXTRA_TEXT, "See the attached...");
    i.putExtra(Intent.EXTRA_STREAM, uri);
    return i;
}

这是开始活动的代码:

File file = new File(getFilesDir(), filename);
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", file);
Intent i = Utils.getSendIntent(uri);

try {
    startActivity(Intent.createChooser(i, "Send file..."));
} catch (Exception e) {
    Log.d(TAG, "failed to start send activity: " + e.getMessage());
    Toast.makeText(MainActivity.this, "No suitable activity found for export.", Toast.LENGTH_SHORT).show();
}

在Slack,Evernote等中运行良好,但在Gmail中除了我提供的电子邮件地址外,还添加了这种格式的另一个收件人:

// com.example.myapplication.provider / my_files / filefile.csv

阻止电子邮件发送,直到从邮件中手动删除。关于消息的其他所有内容都符合预期。

有任何线索如何预防?

1 个答案:

答案 0 :(得分:1)

以下Captain Obvious解决方案解决了这个问题。

替换:

i.setDataAndType(uri, "message/rfc822");

使用:

i.setType("message/rfc822");

因为,在@ CommonsWare的问题推断下,文件内容本身并不是rfc822格式。