1

我有一个 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 is not marking for download error in android

4

2 回答 2

0

What os version are you using? on older devices i've found that this just doesn't work with gmail client app.

于 2013-10-10T18:00:47.787 回答
0

在附件方面,GMail 似乎比某些本地电子邮件应用程序宽松得多。

经过大量分析和反复试验,我发现以下意图适用于三星 Galaxy S5 上的 GMail 和本机电子邮件应用程序(不保证其他设备)

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

于 2015-03-12T17:44:43.070 回答