Android:选择用于打开链接的应用程序

时间:2015-02-16 11:43:08

标签: android android-intent android-implicit-intent

在Android应用程序中,通常选择用于打开链接或执行其他操作的应用程序留给用户,即框架允许用户选择应用程序做某事。

例如,假设您有一条推文链接,您可以选择:

  • 微博
  • 网络浏览器

允许用户选择用于打开链接的应用程序而不是本机应用程序的原因是什么?

3 个答案:

答案 0 :(得分:3)

根据this

  

隐式意图指定可以调用任何应用程序的操作   能够执行操作的设备。使用隐式意图很有用   当您的应用无法执行操作时,其他应用可能会执行此操作   并且您希望用户选择要使用的应用。

this

  

意图的真正力量在于隐含意图的概念。一个   隐式意图只是描述要执行的操作类型(和   (可选地,您要执行操作的数据)和   允许系统在设备上找到可以执行的组件   行动并启动它。如果有多个组件可以   执行意图描述的动作,然后用户选择   哪一个使用。

这个想法是,在Android中,开发人员可以让他的应用程序使用设备上的其他应用程序来执行某项任务,而不必在自己的应用程序中重新创建相同的功能。通常,有多个应用可以执行相同的任务,因此Android允许用户选择他们要用于该任务的应用。

基本上,框架尝试提供完成任务的最通用方式:如果官方Twitter应用程序不存在,那么您始终拥有Chrome

在代码中完成此操作的方式显示为here

答案 1 :(得分:1)

基本上,您会获得一个应用程序列表,用于处理您从应用程序发送的Intent

例如,如果您创建此意图

Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

任何可以处理Intent.ACTION_DIAL的应用程序都会出现在您的选择器列表中。在您的情况下,当您处理链接时,Twitter,Chrome和Web Broswer都是可以处理这些Intent的应用程序,因此它们出现在选择器列表中。

您可以阅读有关此here的更多信息。

答案 2 :(得分:1)

谷歌引入了隐含意图,但这些意图含糊不清,谷歌决定让人类解决歧义。

在某些情况下,机器人无法做出正确的选择。例如,机器人如何决定哪个应用必须从列表中打开链接:Opera,Chrome,Web浏览器?

看起来像Twitter和谷歌翻译这样的应用程序更适合特定的链接,但在实践中应用程序是微不足道的(应用程序自动更新,以便错误可能蔓延,而服务器更新意味着应用程序更新,以便甚至在关闭自动更新的设备上也可能出现错误),有时用户可能希望使用浏览器而不是专用应用程序打开链接。