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