【问题标题】:Android ACTION_SEND intent not populating Subject or BodyAndroid ACTION_SEND 意图未填充主题或正文
【发布时间】:2015-07-24 20:17:02
【问题描述】:

我的应用中有代码,可让用户向开发人员发送电子邮件。它应该预先填充 To 字段、Subject 字段和 body 字段。但是,当我运行时,它会填充 To,但会忽略其他 EXTRA,例如主题、正文和选择器文本。我在两台测试设备上看到了这种行为:一台运行 Lollipop(Verizon 三星 Galaxy Note 4),一台运行 Jelly Bean 4.2.2(CM10.1 上的三星 Fascinate,尽管我不知道这是否与问题有关.

private void sendHelpEmail() {
    Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
    // prompts email clients only
    email.setType("message/rfc822");

    email.putExtra(Intent.EXTRA_EMAIL, new String[] {getString(R.string.about_email)});
    email.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.login_help_subject));
    email.putExtra(Intent.EXTRA_TEXT, getString(R.string.login_help_body, classButton.text(), Txt_Student.getText().toString()));

    try {
        // the user can choose the email client
        startActivity(Intent.createChooser(email, getString(R.string.login_help_chooser)));
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(mThis, R.string.login_help_error, Toast.LENGTH_LONG).show();
        }
}

为什么在填充收件人电子邮件时主题和正文会被忽略?

【问题讨论】:

  • 我想知道是否某些收到该意图的电子邮件客户端应用程序忽略了额外内容。
  • 它甚至在选择应用程序之前忽略了选择器文本。那么我选择的应用程序是Gmail,所以看起来应该有一些至少可以与Gmail一起使用的意图。
  • 当我创建了一个用于发送电子邮件的 Intent 时,我为 Intent 使用了一个参数构造函数(只是操作)。你不应该需要 mailto: 件。此外,您不必调用 setType()。
  • 同样的代码适用于我。我建议您验证您的字符串资源是否正常(包括在当前语言/风味/等中未被覆盖)。
  • 很奇怪。你在用什么?即使我用硬编码的字符串替换资源,我也会得到相同的结果。

标签: android android-intent


【解决方案1】:

Intent intent = new Intent(INTENT.ACTION_SENDTO); 仅显示电子邮件客户端,但由于某种原因未填充某些设备中的 SUBJECT BODY 字段。 (我认为这些是边缘情况)。

Intent intent = new Intent(INTENT.ACTION_SEND); 调出所有可以发送多部分消息的应用程序,例如:WhatsApp、Telegram、Gmail 等,但始终填充所有设备中的 SUBJECTBODY 字段。

【讨论】:

    【解决方案2】:

    确实遇到了这个问题,我是这样解决的:

    检查电子邮件客户端(在我的特定情况下,Gmail)是否只是重新使用未发送的粗略而不是撰写新电子邮件,因为这样做时客户端似乎忽略了Intent.EXTRA_SUBJECTIntent.EXTRA_TEXT

    【讨论】:

    • 什么是“未发送原石”?这不是一个“解决方案”。似乎这对于调试来说可能是一个很好的建议,但是对于“未发送的粗略”这个模棱两可的术语,很难知道这里的意图是什么。
    【解决方案3】:

    以下代码对我有用(刚刚尝试过):

    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL, new String[]{"foo@bar.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
      startActivity(Intent.createChooser(i, "Choose email...");
    } catch (android.content.ActivityNotFoundException ex) {
        // handle edge case where no email client is installed
    }
    

    【讨论】:

      【解决方案4】:

      试试这个对我有用的方法。

      private void sendMail() {
      
          Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "xx@xx.com", null));
          emailIntent.putExtra(Intent.EXTRA_SUBJECT,getResources().getString(R.string.mail_txt));
          startActivity(Intent.createChooser(emailIntent, "Send email..."));
      
      }         
      

      【讨论】:

      • 不,这真的很奇怪 - 这段似乎对其他人有效的代码在我的任何一个测试设备上都不起作用
      猜你喜欢
      • 2011-03-09
      • 2013-11-20
      • 2012-02-02
      • 1970-01-01
      • 2014-03-18
      • 2013-05-29
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多