Android 原生电子邮件客户端不会从位置 Environment.getExternalStorageDirectory().getPath() 获取文件



我有一个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"方法来返回附件的文件大小,否则本机应用程序会拒绝它。

相关内容

  • 没有找到相关文章

最新更新