【问题标题】:android send email with filesandroid发送带有文件的电子邮件
【发布时间】:2015-02-10 02:36:14
【问题描述】:

我需要发送包含多个文件的电子邮件(仅使用电子邮件客户端)。我怎样才能做到这一点? 当我尝试使用 ACTION_SEND_MULTIPLE 时,我无法仅获取电子邮件客户端,但是当我使用 ACTION_SENDTO 时,我无法附加文件。我的代码

        Log.d(TAG, "Selected documents count = " + documents.size());
        if (documents.size() == 0) {
            Toast.makeText(this, "Nothing selected", Toast.LENGTH_LONG).show();
            return;
        }
        Intent sendMailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
        sendMailIntent.setType("message/rfc822");
        ArrayList<Uri> uris = new ArrayList<Uri>();
        for (Document document : documents) {
            Log.d(TAG, "FilePath = " + document.getLocalPdfFile());
            uris.add(Uri.parse("file://" + document.getLocalPdfFile()));
        }

        sendMailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        startActivity(sendMailIntent);

此代码工作正常。它发送文件。问题是如何只向用户显示电子邮件客户端,因为许多其他程序可以处理 ACTION_SEND_MULTIPLE 操作。

【问题讨论】:

  • “我需要发送包含多个文件的电子邮件(仅使用电子邮件客户端)”——不,您需要让用户做用户想做的事情。如果用户想发送电子邮件,很好。如果用户想使用其他选项来处理这些文件,那很好。它是用户的设备,用户的文件,用户的应用,用户的电池寿命,用户的带宽等。请允许用户以用户想要的方式使用他们的设备。
  • EXTRA_STREAM 需要字符串或 Uri,而不是 Uris 的数组列表或其他任何内容。
  • 将您的按钮重命名为“发送”,或使用ShareActionProvider。然后,使用ACTION_SEND_MULTIPLE。您可以立即使您的应用更有用并避免“这个问题”。
  • 对不起,我只是使用 ACTION_SEND_MULTIPLE(复制了错误的代码)。我的问题是如何仅向用户显示电子邮件客户端,因为此操作不仅可以由电子邮件客户端处理。这意味着用户将在选择器列表中看到许多其他程序。

标签: android file email


【解决方案1】:

我发现的问题是,有时 gmail 可以正常接收附件,但不是本地电子邮件客户端,有时反过来。

试试 ACTION_SEND,您的选择器中可能有一些额外的选项,但我发现它更可靠。

    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    emailIntent.setType("plain/text");

    //....same as in your code.

    startActivity(Intent.createChooser(emailIntent, "Send email..."));

祝你好运。

【讨论】:

  • 此代码还将要求用户从列表中选择一个程序,该程序将包含所有可以处理 ACTION_SEND 的应用程序,而不仅仅是电子邮件客户端。
  • 就像我说的“你的选择器中可能有一些额外的选项”
猜你喜欢
  • 2012-03-24
  • 2012-06-15
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2011-12-27
  • 2015-09-09
相关资源
最近更新 更多