Intent本 身是一个消息的集合。他包含那些传递给接收Intent的组件的信息(such as the action to be taken and the data to act on)和传递给Android系统的信息(例如应该绑定到Intent上的组件的类别和如何启动目标activity的指南)主要的,他包含了如下几点:html
组件的名字是应该能够处理Intent,为其指明目标的。这一段所描述的就是关于ComponentName的--他是目标组件的类名的联合体(例如"com.example.project"
)。组件名字中所包含的包名的部分不须要必须与manifest文件中的包名相匹配。java
组件的名字是非强制性的。若是他是固定的,那么Intent就会被传递给指定名字的类的实例,若是他不是固定的,那么Android就会经过 Intent中的其余信息找到合适的目标--能够查看本文档之后的提到的#Intent解决方法-Intent Resolution|Intent解决方法-Intent Resolution。android
组件名字能够经过setComponent(), setClass()或setClassName()来设置,经过getComponent()来读取。app
一个字符串命名了将要被执行的动做,或在广播intents事件中,已经发生并被报告的动做。Intent类定义了许多动做常量,包括以下:ide
你能够访问Intent|Intent类的定义查看一系列的表明通常行为动做的常量。其他行为动做的定义能够在Android API文档中的其余地方找到。你也能够在应用中自定义这样的常量串,这些常量要以包名做为前缀,例如"com.example.project.SHOW_COLOR
".ui
action的名字可以很好的说明intent有着怎样的机构--特别是#数据-Data|数据-Data和#Extras|Extras--就像 方法的名字决定了参数和返回值。因此,使用一个明确的action的名字是一个很好的主意。另外,要为你的Intent定义一个完整的协议,而不是孤立的 定义action。spa
咱们用setAction()来设置Intent中的action并用getAction()来读取。.net
数据运行的URI和其MIME类型。不一样的action被配与不一样的data说明。例如,若是是ACTION_CALL
,那么他的data就是号码的URI--ACTION_VIEW
而且data是http:
URI,那么接收Intent的activity将下载并显示URI所指向的内容。code
当为某个组件匹配一个能够处理数据的Intent的时候,一般除了要了解Data的URI之外,重要的是要知道Data的类型(MIME type)。例如,一个能够展现图片的组件不该该被调用来播放音频。htm
在不少状况下,Data的类型能够从URI中推测出来,特别是URI所展现的内容:指出了Data被用在什么位置及被哪一种content provider控制(参考separate discussion on content providers)。可是Data的类型也能够在Intent中明确的设定。setData()方法设置Data的URI,setType()设置Data的类型(MIME type),setDataAndType()二者一块儿设置,getData()读取URI,getType()读取类型
Category是这样一个String:他包含了须要处理Intent的组件的种类的信息。不少Category的描述可以放在Intent里。就像Action那样,Intent也定义了一些Category常量,以下图表
参考Intent能够查看所有Category的列表
addCategory()方法能够把一个Category放入到Intent中,removeCategory()能够删除以前加入的Category,getCategories()能够获得目前在Intent中全部的Category
Extras是传递给目标组件的键值对信息。就像一些action匹配着特别的data uri,一些action匹配着特别的Extras。例如"time-zone"
指示新时区的信息,"state"
标识耳机设备是否插好的信息,除此还有SHOW_COLOR
的action,颜色值将被设置在一个键-值对信息中。
Intent有一系列的get..()
方法来取出数值。这些方法相对应的存在于Bundle类中。事实上,Extras也可使用putExtras()和getExtras()来操做数据。
::Flags有着不少种类。不少用来通知Android System如何运行一个activity(例如某个activity应该属于哪一个任务)和运行之后如何处理(例如,flag是否属于当前活动activity)。全部这些flag都是在Intent中定义的。
Android system 和平台自己的应用会使用Intent发送系统自己的广播而且激活系统定义的组件。如何构造一个Intent而且激活一个系统组件,请参考list of intents。