通过电子邮件发送文件-无法使用附件-Android

时间:2019-05-25 21:12:17

标签: java android email android-intent

我有一个可以在“下载”文件夹中创建文件的应用程序

这很好用-它使用它来获取文件路径:

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

现在,我正在尝试将该文件附加到电子邮件中,并且我想我已经关闭了,但是我从Gmail收到一个错误消息,它无法附加该文件。

我从file://更改为content://,因为在此之前我无法克服另一个错误。

try {
    final Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("plain/text");
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    URI = Uri.parse("content://" + exportFilePath);
    emailIntent.putExtra(Intent.EXTRA_STREAM, URI);
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.email_body));
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    this.startActivity(Intent.createChooser(emailIntent, getString(R.string.action_export)));
}
catch (Throwable t) {
    Toast.makeText(this, "failed: " + t.toString(), Toast.LENGTH_LONG).show();
    Log.e("URI: ", URI.toString());
}

“ exportFilePath” 包含文件创建后的完整路径。
它看起来像这样: /storage/emulated/0/Download/file.csv

1 个答案:

答案 0 :(得分:0)

Uri.parse("content://" + exportFilePath);

这不是您获得content Uri的方式。 Use FileProvider提供Downloads目录的内容,然后使用FileProvider.getUriForFile()获得该文件的content Uri。在its JavaDocs中可以找到使用FileProvider的相当详细的说明。