不同的Intent构造函数有什么用途?

时间:2015-03-13 06:17:39

标签: java android android-intent

Intent(String action, Uri uri)
Create an intent with a given action and for a given data url.

Intent(Context packageContext, Class<?> cls)
Create an intent for a specific component.

Intent(String action, Uri uri, Context packageContext, Class<?> cls)
Create an intent for a specific component with a specified action and data.

虽然对某些人来说可能是显而易见的,但是你们能帮助我们这些有困难的人吗?#34;得到它&#34;

例如,在什么情况下我想要1而不是另一个?

3 个答案:

答案 0 :(得分:6)

有两种类型的意图:

  • Explicit intents 指定按名称开头的组件(完全限定的类名)。您通常会使用显式意图在您自己的应用中启动组件,因为您知道要启动的活动或服务的类名。例如,启动新活动以响应用户操作或启动服务以在后台下载文件。
  • Implicit intents 不要命名特定组件,而是声明要执行的常规操作,这允许来自其他应用的组件处理它。例如,如果要向用户显示地图上的位置,则可以使用隐式意图请求另一个有能力的应用在地图上显示指定位置。

当您创建启动活动或服务的显式意图时,系统会立即启动Intent对象中指定的app组件。

当您创建隐式意图时,Android系统会通过将意图的内容与设备上其他应用的清单文件中声明的意图过滤器进行比较来找到适当的组件。如果intent与intent过滤器匹配,则系统启动该组件并将其传递给Intent对象。如果多个intent过滤器兼容,系统将显示一个对话框,以便用户可以选择要使用的应用程序。

请参阅:Intents and Intent Filters


回到你的问题,所有这三个结构都是创建隐式/显式意图的方法。其中

  • Intent(String action, Uri uri)使用给定的操作和uri创建implicit intent

  • Intent(Context packageContext, Class<?> cls)创建了明确的意图。

  • Intent(String action, Uri uri, Context packageContext, Class<?> cls)使用给定的操作和uri创建一个明确的意图。

答案 1 :(得分:2)

- 意图使用&#34;行动&#34;在隐式意图的情况下,只要您想要执行某些操作[Intent.ACTION_DIAL,Intent.ACTION_VIEW]。指定广播接收器以广播某些消息。 -Intent(Context packageContext,Class cls)如果您只想从现有活动中调用可以使用它的新活动。

答案 2 :(得分:1)

案例1:要求执行特定操作(称为impicit intent), I.E.

    Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555")) 

上面拨打电话#,在某些情况下,如果有多个应用可以执行操作,它会打开一个选择器对话框,可以说:

完成动作 拨号器 My_dialer

等待用户选择。

案例2:通过引用其名称(显式意图)启动另一个活动 即。

      Intent(Context.this,ActivityToBeLaunched.class)

案例3:前两者的混合: 告诉活动要做一些特定的事情 I.E.

   Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555",Context.this,ActivityToBeLaunched.class))

希望这能进一步加深你对Intents的理解!