0

使用下面的代码,我可以毫无问题地将文件附加到我的应用程序的电子邮件中 ​​- 如果我使用 Gmail 应用程序作为我的电子邮件客户端。但是,任何其他电子邮件客户端都会忽略我发送给它的附件。

这是我的代码:

public static void sendEmail(Context context, String toAddress, String subject, String body, String attachmentPath) throws Exception{
        try {
            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", toAddress, null));
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Intent.EXTRA_SUBJECT, subject);
            intent.putExtra(Intent.EXTRA_TEXT, body);

            File file = new File(attachmentPath);
            Uri uri = Uri.fromFile(file);

            intent.putExtra(Intent.EXTRA_STREAM, uri);

            context.startActivity(intent);
        }
        catch(Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
}

有谁知道如何设置 Intent 以使任何非 Gmail 电子邮件客户端都能识别并接受附件?

谢谢你。

4

3 回答 3

3

这是一些有效的代码。为什么它应该有任何区别,我不知道,但它有效。

public static void sendEmail(Context context, String toAddress, String subject, String body, String attachmentPath, String attachmentMimeType) throws Exception{
        try {
            Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(Intent.EXTRA_EMAIL, new String[]{toAddress});
                intent.putExtra(Intent.EXTRA_SUBJECT, subject);
                intent.putExtra(Intent.EXTRA_TEXT, body);

                File file = new File(attachmentPath);
                Uri uri = Uri.fromFile(file);

                intent.putExtra(Intent.EXTRA_STREAM, uri);
                intent.setType(attachmentMimeType);

                context.startActivity(Intent.createChooser(intent, "Choose an email application..."));
        }
        catch(Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
}

注意使用 ACTION_SEND 而不是 ACTION_SENDTO,以及对 setType(...) 的调用。它似乎有效,但它没有过滤掉作为发送选项呈现的非电子邮件应用程序列表。现在对我来说已经足够好了 - 除非有人对如何使这项工作有任何想法并且仍然过滤掉目标应用程序列表。

感谢那些提供建议的人。希望这对其他人也有帮助。

于 2013-03-21T23:12:05.190 回答
1

通常,这只有在应用程序供应商提供有关您可以传入的参数的规范或您查看源代码时才有可能。您需要首先找出电子邮件客户端使用哪个activity/ intent,然后extra在该活动中处理哪个 / 。

如果幸运的话,您可能会找到一个类似http://developer.android.com/guide/appendix/g-app-intents.html的列表,或者在哪里找到 Android 中可用意图的列表?或应用程序的作者帮助您实现正确的意图调用。

于 2013-03-21T20:55:54.127 回答
1

您是否有特定的电子邮件客户端?他们中的许多人甚至不处理意图中的附件或期望以不同方式填充意图。

于 2013-03-21T20:52:51.803 回答