获取在Android中调用Gmail Intent的发送状态

时间:2013-09-18 12:30:51

标签: android gmail

要通过设备的默认Gmail意图发送邮件,我使用以下功能:

private void initShareIntent(String type) {
        boolean found = false;
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("text/plain");
        share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

        // gets the list of intents that can be loaded.
        List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(
                share, 0);
        if (!resInfo.isEmpty()) {
            for (ResolveInfo info : resInfo) {

                if (info.activityInfo.packageName.toLowerCase().contains(type)
                        || info.activityInfo.name.toLowerCase().contains(type)) {
                    share.putExtra(Intent.EXTRA_SUBJECT,
                            "Reg:xxx");
                    share.putExtra(Intent.EXTRA_TEXT, shareText);
                    share.setPackage(info.activityInfo.packageName);
                    found = true;
                    break;
                }
            }
            if (!found) {
                return;
            }
            startActivity(Intent.createChooser(share, "Select"));
        }
    }

并像这样调用函数:

initShareIntent("mail");

有没有办法获取此操作的发送状态(成功还是失败)?

提前致谢

1 个答案:

答案 0 :(得分:0)

  

有没有办法获取此操作的发送状态(成功还是失败)?

不,抱歉。您甚至不知道用户是否实际发送了电子邮件。

除此之外,你的整体方法很糟糕。您不是简单地使用ACTION_SEND并允许用户选择他们希望如何发送此文本,而是将其限制为某个随机应用,该应用在包名称中包含mail并支持ACTION_SEND { {1}}。这方面的缺陷简直令人惊叹:

  • 您认为所有电子邮件应用在其包名中都有text/plain,其中花费几分钟检查Play商店会证明这是不正确的

  • 您认为包名称中包含mail的最后一个应用是正确的,即使这不是用户实际使用的应用(例如,安装在设备上但不是配置的)

  • 您认为用户确实希望通过电子邮件发送此邮件

我的猜测,鉴于您的主题行(mail),您试图向某人发送电子邮件以进行时间表管理。在这种情况下,这是您的主要选项,按有效性的降序排列:

  1. 请勿使用电子邮件,而是通过网络服务提交时间表

  2. 使用电子邮件,但有一个Web服务发送,以便您知道它已发送

  3. 使用电子邮件,但使用JavaMail发送,以便您知道它已发送

  4. 使用"Reg:Clock In Clock Out"ACTION_SENDTO mailto:,可能会将此时间表信息发送到特定的电子邮件帐户,而不是用户可能从其联系人列表中选择的任何人,因为这不仅会设置目标地址,还会自动将用户限制为支持Uri mailto:计划的电子邮件

  5. 使用Uri并摆脱有缺陷的过滤机制,只允许用户选择正确的应用,并摆脱ACTION_SEND,以便他们可以选择默认值将来使用