Android本机电子邮件客户端无法从位置Environment.getExternalStorageDirectory()获取文件.getPath()

时间:2013-08-22 08:39:59

标签: android email-attachments email-client

我有一个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

中解释的问题

2 个答案:

答案 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,因此我不必通过复制到公共目录来公开数据。我不确定这是否是所有本机电子邮件应用程序的另一个要求。在实施提供商时,我需要实施'查询'返回附件文件大小的方法,否则本机应用程序会拒绝它。