安卓:选择与打开链接的应用(Android: Choose the application with

2019-10-21 22:15发布

在Android应用程序,往往选择一个应用程序来打开链接或做一些其他行动的选择留给用户,即框架用户选择应用程序做一些事情。

例如,假设你有一个链接到一个鸣叫,和你被允许之间进行选择:

  • 推特
  • 网页浏览器

什么是允许用户选择用来打开一个链接,而不是原生应用程序的应用的原因是什么?

Answer 1:

根据此 :

隐式意图指定可以调用设备能够执行动作的任何应用程序的动作。 使用隐含的意图时,你的应用程序无法执行的操作,但其他应用程序也许可以和你想用户挑选使用哪个应用是非常有用的。

与此 :

意图的真正威力在于隐含意图的概念。 隐式意图只是简单地描述要执行的操作(以及可选地,在其上要执行的操作中的数据),并允许该系统来查找可以执行的操作,并开始它的设备上的组件的类型。 如果存在能够执行由意图描述的动作的多个部件,然后,用户选择要使用哪一个。

这个想法是,在Android中,开发者可以让自己的应用程序中使用另一应用的设备上执行,而不必重新创建自己的应用程序中相同的功能的一些任务。 通常情况下,有一个可以执行相同的任务,因此Android允许用户选择他们想要使用该任务,应用一个以上应用程序。

基本上,框架试图提供获取完成的任务的最普遍的方式:如果官方Twitter应用程序不存在,那么你总是有Chrome

这是在代码中完成的方式显示在这里 。



Answer 2:

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

例如,如果创建这样的意图

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

任何应用程序可以处理Intent.ACTION_DIAL将出现在选配清单上。 在你的情况,当你处理链接,微博Chrome和网络Broswer是可以处理这些意图的所有应用程序,因此,他们出现在选配清单。

你可以阅读更多关于此这里 。



Answer 3:

谷歌推出隐含的意图,但这些意图是不明确的,而谷歌决定让人类解决歧义。

在某些情况下,机器人就不能做出正确的选择。 例如,如何机器人决定哪些应用程序必须从列表中打开链接有:歌剧,铬,Web浏览器?

它可能看起来像像Twitter的应用程序和谷歌翻译更适合于特定的联系,但在实践中的应用程序是出问题(应用程序会自动更新,这样的错误可能蠕变,而服务器更新这意味着该应用程序的更新,从而使错误的蠕变在即使在通过自动更新设备关断),并且有时用户可能希望打开一个链路与一个浏览器,而不是使用专用应用程序。



文章来源: Android: Choose the application with which to open a link