我有一个android应用程序,我可以选择通过电子邮件发送日志
为此,我使用以下程序
String outputPath=Environment.getExternalStorageDirectory().getPath()+ File.separator+"sundeeplogs"+ File.separator;
File dir = new File (outputPath);
if (!dir.exists())
{
dir.mkdirs();
}
File zipFileSDCard = new File(outputPath+"sundeep_logs.zip");
现在,我会将一个位于安全位置的zip复制到zipFileSDCard中。
我已检查文件是否已成功复制
将zip文件添加到意向
targetedShare.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(zipFileSDCard));
当我使用gmail应用程序发送电子邮件时,电子邮件会连同附件一起发送,我可以在收到的电子邮件中查看附件。
问题:
当我使用Android原生电子邮件客户端时,它有时不会附加文件,即使它附加了文件,并且发送了电子邮件,但收到的电子邮件中没有附件。
最后,我找到了附件丢失的原因,但找不到本地客户端丢弃附件的原因。此链接中解释的问题Unloaded attachment是';t标记为android 中的下载错误
您使用的操作系统版本是什么?在较旧的设备上,我发现这不适用于gmail客户端应用程序。
在附件方面,GMail似乎比一些本地电子邮件应用程序宽松得多。
经过大量的分析和试错,我发现以下意图将适用于GMail和三星Galaxy S5上的本地电子邮件应用程序(对其他设备没有保证)
public static void emailFile(Activity context, File attachmentInCacheDir, String to, String subject, String body) {
Intent intent = new Intent(Intent.ACTION_SEND);//SENDTO does not seem to work for native
intent.setData(Uri.fromParts("mailto",to, null));
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, body);
intent.setType("message/email");
if (attachmentInCacheDir != null) {
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + CachedFileProvider.getAuthority(context) + "/" + attachmentInCacheDir.getName()));
}
context.startActivityForResult(Intent.createChooser(intent, "Send Email"), 1000);
}
正如您所看到的,我使用提供程序作为Uri,这样我就不必通过复制到公共目录来公开数据。我不确定这是否是所有本地电子邮件应用程序工作的另一个要求。在实现提供程序时,我需要实现"query"方法来返回附件的文件大小,否则本机应用程序会拒绝它。