我正在尝试让我的Android应用程序发送附带文件的电子邮件,我开始使用.txt文件,因为这些很简单。
到目前为止,我有这个(发生在片段中):
//Send the email
Intent mailIntent = new Intent(Intent.ACTION_SEND);
mailIntent.setType("text/Message");
mailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{address});
mailIntent.putExtra(Intent.EXTRA_SUBJECT, "Test Email");
mailIntent.putExtra(Intent.EXTRA_TEXT , "Hi! This is a test!");
//Deal with the attached report
String FileName = "report.txt";
Calculator.generateReport(getActivity().getApplicationContext(), FileName);
//It will be called "report.txt"
File attachment = getActivity().getApplicationContext().getFileStreamPath(FileName);
if (!attachment.exists() || !attachment.canRead()) {
Toast.makeText(getActivity().getApplicationContext(),
"Attachment Error",
Toast.LENGTH_SHORT).show();
System.out.println("ATTACHMENT ERROR");
}
else
{
Uri uri = Uri.fromFile(attachment);
mailIntent.putExtra(Intent.EXTRA_STREAM, uri);
}
//Send, if valid!
try {
startActivity(Intent.createChooser(mailIntent, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getActivity().getApplicationContext(),
"There are no email clients installed.",
Toast.LENGTH_SHORT).show();
}
不幸的是,这似乎不起作用。现在我知道该文件存在;如果我在generateReport()
之后插入适当的代码,我可以找到并访问该文件并阅读其内容。它在那里,我有正确的名字。
当我选择选择电子邮件客户端时,我会选择Gmail并查看该电子邮件中确实附有report.txt
个文件。但是,当我发送电子邮件时,我会收到一条通知,说明“无法发送附件”,并且电子邮件到达时没有任何附件。
我应该注意,我也尝试过其他意图类型,例如text/plain
和message/rfc822
,但无济于事。
关于我可能做错的任何想法?
答案 0 :(得分:4)
如果您已将该文件保存为应用专用文件,该应用可以查看是否正常,但外部电子邮件客户端将无法看到该文件。
您需要将其写入外部存储设备,或将其公开。
使用http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE或http://developer.android.com/guide/topics/data/data-storage.html
答案 1 :(得分:2)
以上SO回答了一个非常好的演练,即复制文件,将其附加到电子邮件,发送电子邮件,最后删除复制的文件。