如何启动预先填写“收件人”字段的电子邮件应用程序?
Posted
技术标签:
【中文标题】如何启动预先填写“收件人”字段的电子邮件应用程序?【英文标题】:How do I launch the email app with the "to" field pre-filled? 【发布时间】:2010-12-18 20:45:52 【问题描述】:我尝试了我在这里找到的这段代码:
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "testemail@gmail.com", null)); startActivity(intent);
但我在屏幕上收到一条消息,上面写着“不支持的操作”。关于如何让它发挥作用的任何想法?
谢谢!
【问题讨论】:
【参考方案1】:试试这个snippet:
/* Create the Intent */
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
/* Fill it with Data */
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]"to@email.com");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Text");
/* Send it off to the Activity-Chooser */
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
关键部分:使用EXTRA_EMAIL
作为您的地址,使用createChooser()
以防用户配置了多个电子邮件客户端。
【讨论】:
谢谢,这行得通:) 我最初确实尝试过类似的方法,但它只是拉出了一些消息屏幕而不是电子邮件应用程序。我想那是因为当时我没有在模拟器中设置电子邮件帐户? 你用了什么final关键字?这会导致某种我不知道的优化吗? sn-p 不是我写的。就个人而言,我可能不会在那里使用 final 关键字。 原作者可能在某个监听器中使用了最终的 emailIntent 变量,但最终改变了方法并忘记删除最终的关键字?无论如何,这只是我的猜测。 :) 它说“没有应用程序可以执行该操作”【参考方案2】:你试过了吗
Intent intent = new Intent(
Intent.ACTION_SENDTO,
Uri.parse("mailto:testemail@gmail.com")
);
startActivity(intent);
【讨论】:
试一试,仍然收到消息:不支持的操作当前不支持此操作。在吐司状的气泡中。我是否需要在清单中设置一些内容才能让我的应用使用它?【参考方案3】:我认为这里真正的问题是您在官方模拟器上运行并且您的意图与任何内容都不匹配。
根据我的测试,当意图的 URI(来自 setData()
)不匹配任何内容并且您在官方 Android 模拟器之一上运行时,就会出现此问题。这似乎不会在真实设备上发生,因此它不应该是现实世界的问题。
您可以在启动 Intent 之前使用此代码检测何时会发生这种情况:
ComponentName emailApp = intent.resolveActivity(getPackageManager());
ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
boolean hasEmailApp = emailApp != null && !emailApp.equals(unsupportedAction);
(显示“不支持的操作”操作方法的活动名称为com.android.fallback.FallbackActivity
。)
【讨论】:
以上是关于如何启动预先填写“收件人”字段的电子邮件应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Stripe Express 入职时预填手机号码、业务类型?