Android发送带附件邮件的意图(Intent)

74

可能重复:
从内部存储发送电子邮件

收件人已经接收了电子邮件,但没有附件。这是代码,请问有哪位专家知道我哪里出错了吗?

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@example.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
intent.putExtra(Intent.EXTRA_TEXT, "body text");
File root = Environment.getExternalStorageDirectory();
File file = new File(root, xmlFilename);
if (!file.exists() || !file.canRead()) {
    Toast.makeText(this, "Attachment Error", Toast.LENGTH_SHORT).show();
    finish();
    return;
}
Uri uri = Uri.parse("file://" + file);
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, "Send email..."));

我没有收到任何的弹出消息。 谢谢。


我认为另一个问题是为什么无法从内部存储发送电子邮件。而在这个问题中,当从外部存储发送时也不起作用。虽然相似,但它们并不相同。 - Alex Gitelman
1
@Alex Gitelman 实际上故障模式是相同的,他在那里得到了一个答案,该答案适用于内部或外部存储。 - Chris Stratton
这行代码不会创建文件(在Java中很常见):File file = new File(root, xmlFilename)。你需要使用文件实例创建输出流写入器来创建文件,除非该文件已经存在于文件系统中。 - Khaled Annajar
我发现这个线程在我的情况下非常有用 https://dev59.com/zVoT5IYBdhLWcg3wvRpk - cwhsu
1个回答

16
文件可能没有开放给所有用户的读取权限。
编辑:确实如此。尝试执行以下操作:
Uri uri = Uri.parse("file://" + file.getAbsolutePath());

1
你希望我们相信这是一个_不同的_杰克逊先生吗?https://dev59.com/Sm025IYBdhLWcg3wVkYR#6074783 - Chris Stratton
@chris,当我在内部保存时,你告诉我要进行外部保存。我这样做了,但是出现了错误。虽然出现了相同的错误,但情况并不相同。 - Mr Jackson
5
我没有告诉你要保存到外部存储,我修改了你的代码,使得它可以从内部存储发送附件,并绕过gmail的问题。不要重新开始一个新程序,犯新错误,请使用你在其他账户的另一个问题中提到的旧程序,可以选择使用内部或外部存储。 - Chris Stratton
1
如果所有其他方法都失败了,您总是可以实现自己的ContentProvider,只需通过文件数据即可:我已经成功地使用它来附加文件到GMail。 - Femi
2
是的,请确保您在logcat中看到的路径是有效的,并且以/mnt/sdcard开头(即使最终会出现在其他位置,也要让GMail保持愉快),或者了解ContentProviders。请在将来坚持一个帐户和一个主题一个问题。 - Chris Stratton
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接