Intent使用已经要一段时间了,那么Intent到底是什么东西,它能做什么,这节课就来详细的看看Intent和IntentFilter

  • 马上学Android 024 - Intent和IntentFilter的详细介绍

Intent是组件之间(eg.Activity、Service、BroadcastReceiver)的传递消息的媒介。

一、Intent的类型

  1. 显式Intent

直接设置目标组件的ComponentName,用于一个应用内部的消息传递,比如启动Activity或者Service,通过Intent的setComponent和setClass来制定目标组件的ComponentName

  1. 隐式Intent

没有指定明确的组件名称的Intent,由于隐式Intent没有明确的目标组件,所以Android系统会帮助应用程序寻找与Intent请求匹配的组件。而寻找的方式是将Intent请求与IntentFilter进行比较,如果IntentFilter中某一个组件匹配了,那么就是目标组件。IntentFilter需要考虑Intent的属性:action、data、category。

二、Intent的结构

Intent中主要包含两部分

  1. action:要执行的动作,例如:ACTION_EDIT
  2. data:要做出的数据,以URI形式出现。

除上面两部分数据之外,还有:

  1. category:该属性是执行action的附加信息。

  2. type:显示指定Intent的数据类型

  3. component: 被指定的Intent的目标组件的类名称

  4. extras: Bundle类型的附加信息

  5. flag:该属性用于通知系统如何启动目标的Activity,或者启动后采取什么样的操作

三、什么是IntentFilter

使用隐式Intent时,并没有指定目标组件,那么系统如何找到目标组件?这时需要通过IntentFilter了,IntentFilter复杂过滤无法响应的Intent,只将符合条件的Intent进行处理。具体如下:

标记 说明
Action IntentFilter可以有一个或者多个Action用于过滤,而且Intent请求只要有一个匹配其中的Action即可,如果IntentFilter没有设置action,那么所有的Intent都会通过
Data IntentFilter能有一个或者多个Data,也可以没有。Data主要包含uri或者数据类型,在对data进行检查时,主要也是针对这两点进行比较。
Category IntentFilter可以设置多个Category,只有当Intent的所用Category都能匹配IntentFilter的category时才能通过检查。