2010-07-09 46 views
3

我有一个Android应用程序,可以将应用程序的安装目录中的文本文件直接保存到手机中。我需要允许用户创建一个新的电子邮件,附加这个保存的文本文件。当我开始发送电子邮件的意图时,所有内容都正确显示在Gmail中,但附件不会发送。我所有关于堆栈溢出的搜索似乎只涉及从SD卡连接图像文件。以下是我使用的代码。请让我知道我是否做了不正确的事情。如何附加本地存储在应用程序目录中的文本文件

File myFile = new File(getFilesDir() + "/" + "someFile.txt"); 
FileOutputStream stream = null; 

if(file != null) 
{ 
    steam = openFileOutput("someFile.txt", Context.MODE_WORLD_READABLE); 
    stream.write(some_data); 

    Uri uri = Uri.fromFile(myFile); 

    Intent sendIntent = new Intent(Intent.ACTION_SEND); 
    sendIntent.setType("text/plain"); 
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    sendIntent.putExtra(Intent.EXTRA_TEXT, email_text); 
    sendIntent.putExtra(Intent.EXTRA_STREAM, uri); 

    file.close(); 

    startActivity(Intent.createChooser(sendIntent, "Email:")); 
} 

我也试过sendIntent.setType(“application/octet-stream”);但这并没有什么区别。我不知道为什么文件没有附加和发送。

任何想法?

回答

4

我以前见过这个,我唯一能解决的办法就是把文件写入SD卡。

这是值得的尝试写入文件到SD卡并附加它,如果只是为了消除文件位置作为问题的原因。

+0

嗯......这是不幸的。我会试一试,看看它是否更好。谢谢Al。 如果没有SD卡存在,你采取了什么方法?您是否决定将所有文件数据都附加到Intent电子邮件的EXTRA_TEXT部分中? – Michael 2010-07-10 03:35:00

+0

如果没有卡片,我会显示“您需要SD卡信息”。 我知道这远非理想,但它避免了用户抱怨附件没有作为附件到达并且与他们有关的问题在他们的邮件客户端中进行文件 - >保存并抱怨他们的其他应用程序无法导入的问题该文件(由于邮件头在文件中)。 – 2010-07-10 07:05:47

+0

再次感谢艾尔。更改我的代码以将文件存储在SD卡上。 – Michael 2010-07-11 06:37:57

5

我刚刚遇到完全相同的问题(希望将文本文件附加到Gmail邮件中)。如果您在Android日志看,其原因是:

02-28 21:01:28.434: E/Gmail(19673): file:// attachment paths must point to file:///mnt/sdcard. Ignoring attachment file:///data/data/com.stephendnicholas.gmailattach/cache/Test.txt 

作为一种变通方法,您可以使用的ContentProvider提供对文件的访问你的应用程序的内部缓存,以便Gmail可以连接它们。我刚刚写了一个blog post如何做到这一点。

希望这是一些帮助:)

+0

谢谢stephendnicholas,我会检查你的帖子! – Michael 2012-03-16 17:59:37

+0

+1,因为这是我发现的实际处理问题的唯一答案(“Attachment NOT in SD”)事件我还没有尝试你的方法(并且不知道它是否有效)。我已经为您的博客文章添加了书签。 – 2012-08-22 03:17:45

相关问题