阅读文档和其他一些文档,没有人真正指定 Intent 对传递的 URI 做了什么。我只是好奇当它获得 URI 时会发生什么。我知道这取决于方案,所以如果方案是http
,那么它是否会尝试打开该 Web URI?
我问,因为我正在尝试使用以 JSON 格式发回数据的 RESTful API。在尝试将数据从一个活动传递到另一个活动时,让它为我打开 URI,而不是通过 HttpClient 自己进行 HTTP 调用会很好。没什么大不了的,但我只是好奇这是否有效。
阅读文档和其他一些文档,没有人真正指定 Intent 对传递的 URI 做了什么。我只是好奇当它获得 URI 时会发生什么。我知道这取决于方案,所以如果方案是http
,那么它是否会尝试打开该 Web URI?
我问,因为我正在尝试使用以 JSON 格式发回数据的 RESTful API。在尝试将数据从一个活动传递到另一个活动时,让它为我打开 URI,而不是通过 HttpClient 自己进行 HTTP 调用会很好。没什么大不了的,但我只是好奇这是否有效。
Intent 只是一个对象……它对 URI 没有任何作用。Intent 用于 startActivity()、sendBroadcast() 等函数调用。
例如,当您将 Intent 传递给 startActivity() 时,该 Intent 对象对 Activity 可用。Activity 可以随意解释 URI。
Android 还使用 Intent Filters 来帮助将 Intent 路由到各种已安装的 Activity,这些 Intent Filter 可能会检查 URI。
查看http://developer.android.com/guide/components/intents-filters.html以获取所有信息。
您的意思并不完全清楚,但是 Intents 的行为基本上是由 Android 包管理器决定的。您可以将 Intent 视为过程调用:您指定某人来处理 Intent,以及一些附加数据(参数),可能是某个类别等......
Android 包管理器会查看您的意图,并且基本上会询问“系统上的哪个应用程序准备使用和处理此意图?” 然后系统打开该应用程序(如果它尚未驻留在内存中),然后将意图抛出该应用程序。请注意,在某些情况下,意图处理程序之间可能存在歧义:可以准备多个应用程序来处理意图。您有时可以通过要求用户选择应该处理意图的应用程序的形式看到这一点(并且用户可以选择默认应用程序)。
当然,如何处理意图的动态语义取决于系统上安装的应用程序集,并且可能会根据安装的应用程序类型而改变。听起来,在您的情况下,您最关心的是具有ACTION_VIEW
与其相关联的操作的意图。在一般情况下,看起来像 URL 的东西会被浏览器“捕获”(尽管不能保证一定是这种情况!),并且包管理器会查看 URI 的结构并说“嘿,这看起来它应该由应用程序 X 处理,”我将把这个 URL 发送给它。(当然,新应用程序可以通过注册其他意图过滤器来改变这种行为..)
意图是对要执行的操作的抽象描述。uri
意图必须对其进行操作的特定数据:
意图结构
意图中的主要信息是:
action:要执行的一般动作,如ACTION_VIEW、ACTION_EDIT、ACTION_MAIN等。
data:要操作的数据,例如联系人数据库中的人员记录,以 Uri 表示。
操作/数据对的一些示例是:ACTION_VIEW content://contacts/people/1 -- 显示标识符为“1”的人的信息。
ACTION_VIEW tel:123 -- 显示填写给定号码的电话拨号器。注意 VIEW 操作如何执行被认为对特定 URI 最合理的事情。
ACTION_VIEW content://contacts/people/ -- 显示用户可以浏览的人员列表。此示例是联系人应用程序的典型顶级条目,向您显示人员列表。选择要查看的特定人员将导致使用新意图 { ACTION_VIEW content://contacts/N } 来启动显示该人员的活动。
因此,您可以看到具有不同数据/uri 的相同操作在data operate on
.