【问题标题】:Open Email using Android Intent使用 Android Intent 打开电子邮件
【发布时间】:2020-03-15 11:28:46
【问题描述】:

我正在使用以下代码通过电子邮件意图发送我的应用程序反馈。在构建版本 28 之前它工作正常。但是在 Android 29 中,我在打开电子邮件应用程序期间没有得到主题和正文文本,它只显示到电子邮件地址而不显示其他文本。我的代码如下所示

 String appName = getResources().getString(R.string.app_name);
                        int versionCode = BuildConfig.VERSION_CODE;
                        String versionName = BuildConfig.VERSION_NAME;
                        String deviceInfo = "Device Info:";
                        deviceInfo += "\n OS Version: " + System.getProperty("os.version") + "(" + android.os.Build.VERSION.INCREMENTAL + ")";
                        deviceInfo += "\n OS API Level: " + android.os.Build.VERSION.SDK_INT;
                        deviceInfo += "\n Device: " + android.os.Build.DEVICE;
                        deviceInfo += "\n Model (and Product): " + android.os.Build.MODEL + " (" + android.os.Build.PRODUCT + ")";
                        deviceInfo += "\n App Version Code: " + versionCode;
                        deviceInfo += "\n App Version Name: " + versionName;
                        Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "myemail@gmail.com", null));
                        emailIntent.putExtra(Intent.EXTRA_SUBJECT, appName + " Problem");
                        emailIntent.putExtra(Intent.EXTRA_TEXT, "write your issue here \n\n\n______________________________\n\n" + deviceInfo);

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

我在 logcat 中没有收到任何错误。让我知道是否有人可以帮助我解决问题。 谢谢!

【问题讨论】:

  • 自从neither EXTRA_SUBJECT nor EXTRA_TEXT are documented to be supported by ACTION_SENDTO,我不知道你为什么期望它在电子邮件客户端上可靠地工作。任何给定的应用程序是否希望尝试处理未记录的额外内容取决于该应用程序的开发人员。
  • @CommonsWare 感谢您的评论和指出。正如我所说,它在我的一个构建版本到 28 的应用程序中运行良好。我在 29.0.2 中遇到问题谢谢!
  • @CommonsWare 你可以看到EXTRA_SUBJECT here
  • “正如我所说的那样,它在我的一个构建版本为 28 的应用程序中运行良好”——并非如此。有几十个(如果不是几百个)应用程序可供用户选择回复ACTION_SENDTO 以获得mailto: Uri。没有人必须尊重那些无证的临时演员。 “您可以在此处看到 EXTRA_SUBJECT”——您在 ACTION_SENDTO 的文档中看不到 EXTRA_SUBJECT here。任何ACTION_SENDTO 应用程序都不必尊重额外的内容。
  • 当然欢迎您将EXTRA_SUBJECT 包含在您的ACTION_SENDTO Intent 中。许多应用程序会忽略它,您将不得不学会忍受这种限制。如果您使用ACTION_SEND 而不是ACTION_SENDTO,那么 EXTRA_SUBJECT 应该可以工作。即使这样,有缺陷的应用程序也可能会忽略它。

标签: java android


【解决方案1】:

我建议将所有内容都放在这样的意图数据中

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
String mailTo = "mailto:example@example.com" +
        "?cc=" + "" +
        "&subject=" + Uri.encode("Email subject") +
        "&body=" + Uri.encode("Email body");
emailIntent.setData(Uri.parse(mailTo));

// For result
startActivityForResult(Intent.createChooser(emailIntent, "Send email"), 100);

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

它运行良好,大多数(如果不是所有)电子邮件客户端都应该接受它。

【讨论】:

  • 您好!什么是 Const.RC_PRODUCT_REQUEST 以及如何使用它?谢谢!
  • @rajrathod 这是意图的请求代码。 Const.RC_PRODUCT_REQUEST 只是我拥有的一个代码文件。您可以在其中放置任何值并在 onActivityResult 函数中获取意图的结果。 developer.android.com/training/basics/intents/result
  • 我已经删除了 ActivityResult 代码并在没有它的情况下使用它并且它工作正常,就像我正在寻找的那样。非常感谢:)
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多