在 Android 应用程序中,选择应用程序打开链接或执行其他操作的选择通常留给用户,即框架让用户选择应用程序来执行某些操作。
例如,假设您有一条推文链接,您可以选择:
- 推特
- 铬合金
- 网页浏览器
允许用户选择打开链接的应用程序而不是本地应用程序的原因是什么?
在 Android 应用程序中,选择应用程序打开链接或执行其他操作的选择通常留给用户,即框架让用户选择应用程序来执行某些操作。
例如,假设您有一条推文链接,您可以选择:
允许用户选择打开链接的应用程序而不是本地应用程序的原因是什么?
据此:_
隐式意图指定可以调用设备上能够执行该操作的任何应用程序的操作。当您的应用程序无法执行操作时,使用隐式意图很有用,但其他应用程序可能可以并且您希望用户选择要使用的应用程序。
这:_
意图的真正力量在于隐含意图的概念。隐式意图仅描述要执行的操作的类型(以及您希望对其执行操作的可选数据),并允许系统在设备上找到可以执行操作并启动它的组件。如果有多个组件可以执行意图描述的动作,那么用户选择使用哪一个。
这个想法是,在 Android 中,开发人员可以让他的应用程序使用设备上的另一个应用程序来执行某些任务,而不必在他们自己的应用程序中重新创建相同的功能。通常,有多个应用程序可以执行相同的任务,因此 Android 允许用户选择他们想要用于该任务的应用程序。
基本上,该框架试图提供完成任务的最通用方式:如果官方Twitter
应用程序不存在,那么您总是有Chrome
.
此处显示了在代码中完成此操作的方式。
基本上,您会得到一个应用程序列表,这些应用程序处理Intent
您从应用程序发送的内容。
例如,如果您创建此意图
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
任何可以处理的应用程序都Intent.ACTION_DIAL
将出现在您的选择器列表中。在您的情况下,当您处理链接时,Twitter、Chrome 和 Web Broswer 都是可以处理这些 Intent 的应用程序,因此它们出现在选择器列表中。
您可以在此处阅读有关此内容的更多信息。
谷歌引入了隐含意图,但这些意图是模棱两可的,谷歌决定让人类来解决模棱两可的问题。
在某些情况下,机器人无法做出正确的选择。例如,机器人如何决定哪些应用程序必须从列表中打开链接:Opera、Chrome、Web 浏览器?
看起来像 twitter 和 google translate 之类的应用程序更适合特定链接,但实际上应用程序会出现故障(应用程序会自动更新,因此错误可能会蔓延,而服务器更新意味着应用程序会更新,因此错误可能会蔓延)即使在关闭自动更新的设备上),有时用户可能希望使用浏览器而不是专用应用程序打开链接。