【问题标题】:Android: Choose the application with which to open a linkAndroid:选择打开链接的应用程序
【发布时间】:2015-02-16 11:43:07
【问题描述】:

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

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

  • 推特
  • 网络浏览器

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

【问题讨论】:

  • 这真的是一道编程题吗?
  • 作者问的是Android框架如何处理不同的Intent。也许有点宽泛,但我会说是的。 @Squonk

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


【解决方案1】:

根据this

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

this:

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

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

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

这在代码中完成的方式显示为here

【讨论】:

  • 首先,感谢大家的回答。我的问题更侧重于让您选择打开此链接的应用程序,而不是直接使用官方应用程序(如果已安装)打开它。有什么特殊原因吗?
  • 正如我上面所说的,框架使用最通用的方式来完成任务:如果官方的Twitter 应用程序不存在,那么你总是有Chrome。试想一下:如果用户没有在他们的设备上安装Twitter 应用程序,那么在没有其他选项的情况下,他们将无法发布推文。因此,框架总是试图给出多种方式来完成一项任务。这有意义吗?
【解决方案2】:

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

例如,如果您创建此意图

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

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

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

【讨论】:

    【解决方案3】:

    Google 引入了隐式意图,但这些意图是模棱两可的,Google 决定让人类来解决歧义。

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

    看起来像 twitter 和 google translate 之类的应用程序更适合特定链接,但实际上应用程序会出现故障(应用程序会自动更新,因此错误可能会蔓延,而服务器更新意味着应用程序会更新,因此即使在关闭自动更新的设备上也可能出现错误),有时用户可能希望使用浏览器而不是专用应用打开链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多