【问题标题】:Android: problem sending email with attachment from my applicationAndroid:从我的应用程序发送带有附件的电子邮件时出现问题
【发布时间】:2011-06-15 00:46:15
【问题描述】:

我的应用程序允许用户创建和修改文件。我希望他们能够将文件作为电子邮件附件发送。因此,我需要首先创建并写入一个临时文件,然后将其附加到电子邮件中。然后我想在电子邮件程序完成时删除临时文件。不幸的是,一旦用户单击“发送”,gmail 应用程序就会以结果代码进行响应;如果我在收到结果代码后立即删除文件,则不会发送附件。

可能有其他问题出现,并且由于其他原因未发送附件,但我很确定我的评估是正确的,因为如果我注释掉 mEmailTmpFile.delete() 调用,下面的代码可以正常工作。如果我在mEmailTmpFile.delete() 之前立即做一些非常不受欢迎的事情,例如Thread.sleep(4000),它也可以正常工作。

电子邮件发送完成后是否会收到通知?或者关于我应该如何解决这个问题的任何其他建议?

//send an email...

File externalStorage = Environment.getExternalStorageDirectory();
String sdcardPath = externalStorage.getAbsolutePath();
mEmailTmpFile = new File(sdcardPath + "/" +  name );

//do some other to ensure unqiueness and then write to the file...

//all done writing, send email

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("application/zip");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, name);
sendIntent.putExtra(Intent.EXTRA_TEXT, "File attached.");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ mEmailTmpFile.getPath()));
startActivityForResult(Intent.createChooser(sendIntent, "Email"), REQUESTCODE_EMAIL);

public synchronized void onActivityResult(int reqCode, int resultCode, Intent data)
{
   if (reqCode == REQUESTCODE_EMAIL)
   {
    mEmailTmpFile.delete();
    }
}

【问题讨论】:

标签: android


【解决方案1】:

在我的应用程序中,我不会删除临时文件。如果需要空间,Android 将通过删除文件来处理它。我会确保您不要在 SDCard 根目录中创建 tmp 文件,因为这看起来很乱,但除此之外应该没有问题。

【讨论】:

  • 除非您设置 File.deleteOnExit(),否则 Android 不会删除该文件,但我发现这不可靠。此外,您可能指的是在缓存目录中创建的文件,但是,Gmail 无法访问这些文件,因此无法在此处使用。
  • @grennis 为什么电子邮件应用程序无法访问缓存目录中的文件?你试过世界可读模式吗?
  • 是的,它不会像 Android 姜饼一样工作,我上次尝试过
猜你喜欢
  • 2016-10-08
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2019-12-24
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多