我有一个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 isn't marked for download error in android
中解释的问题答案 0 :(得分:0)
您使用的是什么操作系统版本?在旧设备上,我发现这只适用于gmail客户端应用程序。
答案 1 :(得分:0)
对于附件,似乎GMail比一些本机电子邮件应用程序要宽松得多。
经过大量分析和反复试验后,我发现以下意图适用于GMail和Samsung 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,因此我不必通过复制到公共目录来公开数据。我不确定这是否是所有本机电子邮件应用程序的另一个要求。在实施提供商时,我需要实施'查询'返回附件文件大小的方法,否则本机应用程序会拒绝它。