基本上我有一个流行电子邮件应用程序的包名称列表,我想创建一个选择器来启动发送电子邮件意向,您可以参考this 问题,在这里他使用包管理器只是Gmail,我想这样做的包列表如何使用包管理器为应用程序列表创建选择器
回答
我想要做的是模拟桌面上的行为,当你点击一个电子邮件链接,打开Outlook/Gmail客户端将字段设置为电子邮件ID,但除此之外,我想让用户选择已推出的电子邮件应用程序
startActivity(new Intent(Intent.ACTION_SENDTO)
.setData(Uri.parse("mailto:"+yourEmailAddressGoesHere)));
您将yourEmailAddressGoesHere
替换为“电子邮件ID”。
如果用户有多个电子邮件客户端,并且用户没有选择默认的电子邮件客户端,用户将自动获得一个选择器。如果用户只有一个电子邮件客户端,或者选择了默认的电子邮件客户端,则会导致用户进行一些活动,以便将邮件写入指定的电子邮件地址。
是的,这就是我想要的,所以我使用try catch块来显示错误,当没有电子邮件客户端存在是吗?你确定这只能迎合电子邮件应用程序吗? – Bhargav
@Bhargav:“所以我使用try catch块...” - 是的。你也可以在'PackageManager'上创建'Intent'并调用'queryIntentActivities()',传入'Intent'。如果'queryIntentActivities()'返回一个零长度列表,如果你尝试在'Intent'上调用'startActivity()',你就会知道'ActivityNotFoundException'。 – CommonsWare
@Bhargav:“你确定这只能满足电子邮件应用程序吗?” - 具有为'mailto'方案实现'ACTION_SENDTO'的活动的任何应用程序都是用户的选择。这通常只是电子邮件应用程序。更重要的是,应用的组合取决于用户,而不是你。你不是比你的用户更重要。如果您的用户想要使用别的东西,并且选择器中出现其他内容,欢迎用户选择它。 – CommonsWare
创建意图附加设置其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();
}
您不应该将这些额外内容与ACTION_SENDTO一起使用,因为它们仅记录了ACTION_SEND和ACTION_SEND_MULTIPLE。另外,我强烈建议不要使用带有ACTION_SENDTO的选择器。更多细节在这里:https://medium.com/@cketti/android-sending-email-using-intents-3da63662c58f – cketti
尊重你的pov和非常好的解释,但我有另一种观点。首先,你提到他们也适用于这种行为,我认为使用它们作为临时演员而不是在uri中合并会更清楚。其次,我可能会使用Gmail,但有时我使用雅虎例如,所以我认为在这种情况下选择器是有用的。 – SaNtoRiaN
当不使用Intent.createChooser()时,用户不必选择默认应用程序。在这种情况下,他们每次都会看到一个选择器对话框。但是,如果作为应用程序的开发人员决定使用'Intent.createChooser()',用户将无法选择默认应用程序。 – cketti
- 1. 如何为Android应用程序创建线程管理器?
- 2. Android应用程序包管理器
- 3. Android包管理器列表导致应用程序崩溃
- 4. 选择语言来创建任务管理Web应用程序
- 5. 如何使用列表项创建多个选择器
- 6. 如何使用java程序读取任务管理器列表
- 7. 从移动应用程序调用文件管理器列表
- 8. 在IIS7管理器中创建应用程序失败
- 9. 在winforms应用程序中创建文件资源管理器
- 10. 如何为iPhone应用程序创建随机选择的NSString“包”
- 11. 如何创建Android Web UI - 远程应用程序管理
- 12. Drupal:为管理风格创建一个独特的选择器?
- 13. 使用android创建认证管理器
- 14. 使用SQLite管理器创建索引
- 15. 如何在wso2 api管理器中为在mule软件中创建的应用程序创建api?
- 16. 选择为Windows应用程序创建安装程序
- 17. 使用peta poco在MVC应用程序中创建选择列表ORM
- 18. Python Flask应用程序管理器
- 19. ec2的管理器应用程序
- 20. IntelliJ IDEA“Tomcat管理器”应用程序
- 21. 如何在Xcode for iOS应用程序中创建联系人选择器?
- 22. 应用程序管理器中的Android应用程序标题
- 23. 如何使用YUM或Apt包管理器在Linux中创建安装程序包?
- 24. 如何使用VS2008服务器资源管理器在SQLite中创建表格
- 25. 如何创建和管理多租户ASP MVC应用程序
- 26. 使用JavaScript创建CSS选择器
- 27. 使用CSS选择器创建组件?
- 28. 如何更改应用程序管理器android中的图标应用程序?
- 29. 使用包管理器时,您如何管理Perl模块?
- 30. 如何在Django中使用HTML5颜色选择器管理
“基本上我有一个流行的电子邮件应用程序包名称列表” - 请允许用户使用用户需要的任何电子邮件应用程序。这可能包括列表中的应用程序。或者,请解释为什么它在*用户的*最佳利益中被限制在您的列表中。 – CommonsWare
@CommonsWare我这样做是因为据我所知(根据这个问题中提到的问题),没有适当的意图行动专门针对电子邮件应用程序或更正确 - 所有世界的电子邮件应用程序听到的共同意图行动 – Bhargav
“启动发送电子邮件意图“ - 如果您想发送电子邮件*,请使用”ACTION_SENDTO“(如果您拥有电子邮件地址)或”ACTION_SEND“(如果您没有)。你不需要使用'PackageManager',或者有一个电子邮件应用程序包列表。在你关联的问题中,OP不*希望“启动发送电子邮件意向”。该OP以粗体写道:“**我不想发送新消息**”。 – CommonsWare