2016-01-06 82 views
0

基本上我有一个流行电子邮件应用程序的包名称列表,我想创建一个选择器来启动发送电子邮件意向,您可以参考this 问题,在这里他使用包管理器只是Gmail,我想这样做的包列表如何使用包管理器为应用程序列表创建选择器

+0

“基本上我有一个流行的电子邮件应用程序包名称列表” - 请允许用户使用用户需要的任何电子邮件应用程序。这可能包括列表中的应用程序。或者,请解释为什么它在*用户的*最佳利益中被限制在您的列表中。 – CommonsWare

+0

@CommonsWare我这样做是因为据我所知(根据这个问题中提到的问题),没有适当的意图行动专门针对电子邮件应用程序或更正确 - 所有世界的电子邮件应用程序听到的共同意图行动 – Bhargav

+0

“启动发送电子邮件意图“ - 如果您想发送电子邮件*,请使用”ACTION_SENDTO“(如果您拥有电子邮件地址)或”ACTION_SEND“(如果您没有)。你不需要使用'PackageManager',或者有一个电子邮件应用程序包列表。在你关联的问题中,OP不*希望“启动发送电子邮件意向”。该OP以粗体写道:“**我不想发送新消息**”。 – CommonsWare

回答

2

我想要做的是模拟桌面上的行为,当你点击一个电子邮件链接,打开Outlook/Gmail客户端将字段设置为电子邮件ID,但除此之外,我想让用户选择已推出的电子邮件应用程序

startActivity(new Intent(Intent.ACTION_SENDTO) 
    .setData(Uri.parse("mailto:"+yourEmailAddressGoesHere))); 

您将yourEmailAddressGoesHere替换为“电子邮件ID”。

如果用户有多个电子邮件客户端,并且用户没有选择默认的电子邮件客户端,用户将自动获得一个选择器。如果用户只有一个电子邮件客户端,或者选择了默认的电子邮件客户端,则会导致用户进行一些活动,以便将邮件写入指定的电子邮件地址。

+0

是的,这就是我想要的,所以我使用try catch块来显示错误,当没有电子邮件客户端存在是吗?你确定这只能迎合电子邮件应用程序吗? – Bhargav

+0

@Bhargav:“所以我使用try catch块...” - 是的。你也可以在'PackageManager'上创建'Intent'并调用'queryIntentActivities()',传入'Intent'。如果'queryIntentActivities()'返回一个零长度列表,如果你尝试在'Intent'上调用'startActivity()',你就会知道'ActivityNotFoundException'。 – CommonsWare

+0

@Bhargav:“你确定这只能满足电子邮件应用程序吗?” - 具有为'mailto'方案实现'ACTION_SENDTO'的活动的任何应用程序都是用户的选择。这通常只是电子邮件应用程序。更重要的是,应用的组合取决于用户,而不是你。你不是比你的用户更重要。如果您的用户想要使用别的东西,并且选择器中出现其他内容,欢迎用户选择它。 – CommonsWare

2

创建意图附加设置其URI数据

Intent intent = new Intent(Intent.ACTION_SENDTO); 
intent.setData(Uri.parse("mailto:")); 
intent.putExtra(Intent.EXTRA_EMAIL, addresses); 
intent.putExtra(Intent.EXTRA_SUBJECT, subject); 

然后创建一个选择者的意图。当您希望用户每次发送电子邮件时都可以选择他想要的应用程序,这非常有用。如果你想选择一个应用程序,并使其成为默认情况下,可以省略选择器,并启动意图直接

Intent chooser = Intent.createChooser(intent, "Chooser title"); 

然后检查是否至少有一个活动,可以处理电子邮件的意图

if(intent.resolveActivity(getPackageManager()) != null){ 
    // there are apps, start the chooser 
    startActivity(chooser); 
} else { 
    // no apps found 
    Toast.makeText(this, "No apps found", Toast.LENGTH_SHORT).show(); 
} 
+0

您不应该将这些额外内容与ACTION_SENDTO一起使用,因为它们仅记录了ACTION_SEND和ACTION_SEND_MULTIPLE。另外,我强烈建议不要使用带有ACTION_SENDTO的选择器。更多细节在这里:https://medium.com/@cketti/android-sending-email-using-intents-3da63662c58f – cketti

+0

尊重你的pov和非常好的解释,但我有另一种观点。首先,你提到他们也适用于这种行为,我认为使用它们作为临时演员而不是在uri中合并会更清楚。其次,我可能会使用Gmail,但有时我使用雅虎例如,所以我认为在这种情况下选择器是有用的。 – SaNtoRiaN

+0

当不使用Intent.createChooser()时,用户不必选择默认应用程序。在这种情况下,他们每次都会看到一个选择器对话框。但是,如果作为应用程序的开发人员决定使用'Intent.createChooser()',用户将无法选择默认应用程序。 – cketti

相关问题