要通过设备的默认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");
有没有办法获取此操作的发送状态(成功还是失败)?
提前致谢
答案 0 :(得分:0)
有没有办法获取此操作的发送状态(成功还是失败)?
不,抱歉。您甚至不知道用户是否实际发送了电子邮件。
除此之外,你的整体方法很糟糕。您不是简单地使用ACTION_SEND
并允许用户选择他们希望如何发送此文本,而是将其限制为某个随机应用,该应用在包名称中包含mail
并支持ACTION_SEND
{ {1}}。这方面的缺陷简直令人惊叹:
您认为所有电子邮件应用在其包名中都有text/plain
,其中花费几分钟检查Play商店会证明这是不正确的
您认为包名称中包含mail
的最后一个应用是正确的,即使这不是用户实际使用的应用(例如,安装在设备上但不是配置的)
您认为用户确实希望通过电子邮件发送此邮件
我的猜测,鉴于您的主题行(mail
),您试图向某人发送电子邮件以进行时间表管理。在这种情况下,这是您的主要选项,按有效性的降序排列:
请勿使用电子邮件,而是通过网络服务提交时间表
使用电子邮件,但有一个Web服务发送,以便您知道它已发送
使用电子邮件,但使用JavaMail发送,以便您知道它已发送
使用"Reg:Clock In Clock Out"
和ACTION_SENDTO
mailto:
,可能会将此时间表信息发送到特定的电子邮件帐户,而不是用户可能从其联系人列表中选择的任何人,因为这不仅会设置目标地址,还会自动将用户限制为支持Uri
mailto:
计划的电子邮件
使用Uri
并摆脱有缺陷的过滤机制,只允许用户选择正确的应用,并摆脱ACTION_SEND
,以便他们可以选择默认值将来使用