【转载】Android中的Intent详解
声明:本文转载自http://www.eoeandroid.com/thread-34-1-1.html
版权和最终解释权给原作者所有,谢谢。
在一个Android应用中,主要有四大组件构建,这四大组件可以参考Android应用的构成,四大组件之间是独立的,但是它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。
四大组件之间的通信,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及的数据以及附加数据进行描述,Android系统则根据此Intent的描述,找到对应的组件,将Intent传递给组件,并完成组件之间的调用。
因为Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
例如,在一个联系人应用中,我们在联系人列表页面(假设对应的Activity为ListActivity)上,点击某个联系人时,希望能够跳到联系人详细信息页面(假设对应的Activity为DetailActivity)。为了实现跳转过程,并在两个Activity之间传递数据,ListActivity需要构造一个Intent,这个Intent告诉Android系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(Intent intent)将构造的Intent传入,系统会根据此Intent的描述,到Menifest文件中找到满足此Intent要求的Activity,系统会调用DetailActivity,根据传入的Intent,来执行相应的操作。
在Android的参考文档中,对Intent的定义是执行某项操作的一个抽象描述。Intent首先要描述的是一个要执行的动作(action),如VIEW_ACTION(查看)、EDIT_ACTION(修改)等,Android系统为我们定义了一套标准动作:
MAIN_ACTION
VIEW_ACTION
EDIT_ACTION
PICK_ACTION
GET_CONTENT_ACTION
DIAL_ACTION
CALL_ACTION
SENDTO_ACTION
ANSWER_ACTION
INSERT_ACTION
DELETE_ACTION
RUN_ACTION
LOGIN_ACTION
CLEAR_CREDENTIALS_ACTION
SYNC_ACTION
PICK_ACTIVITY_ACTION
WEB_SEARCH_ACTION
除了这些Action之外,我们可以根据应用的需要,定义自己的动作,并定义相应的Activity来处理自定义的动作。
其次,Intent描述的是执行动作所需要的数据(data),Android中采用指向数据的一个URI来表示,如在联系人应用中,一个指向某联系人的URI可能为:content://contacts/1。这种URI表示,通过ContentURI这个类来描述,具体可以参考android.net.ContentURI类文档。
以联系人为例,以下是一些action / data对,及其它们要表达的意图:
VIEW_ACTION content://contacts/1 --- 显示标识符为1的联系人的详细信息;
EDIT_ACTION content://contacts/1 --- 编辑标示符为1的联系人的详细信息;
VIEW_ACTION content://contacts/ --- 显示所有联系人列表;
PICK_ACTION content://contacts/ --- 显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父Activity。例如,电子邮件客户端可以使用这样的一个Intent,要求用户在联系人列表中选择一个联系人作为收件人。
除了action和data这两个重要属性之外,Intent还有一些附加属性:
category(类别),被执行动作的附加信息,例如LAUNCHER_CATEGORY表示Intent的接受者应该在Launcher中作为顶级应用出现,而ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这些动作可以在同一块数据上执行。
type(数据类型),显示指定Intent的数据类型(MIME),一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显示指定的类型,而不再进行推导。
component(组件),指定Intent的目标组件的类名称,通常Android会根据其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是如果指定component属性的话,将直接使用指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。
extras(附加信息),是其它所有附加信息的集合,使用extras可以为组件提供扩展信息,比如,如果执行发送电子邮件这个动作,可以将电子邮件的标题、正文等保存在extras里,然后发送给邮件接收者。
总之,action、data/type、category和extras一起形成了一种语言。这种语言使系统能够理解诸如“查看联系人的详细信息”之类的短语。随着应用不断的加入到系统中,可以添加新的action、data/type、category来进行扩展。应用也可以提供自己的Activity来处理已经存在的这样的“短语”,从而改变这些“短语”的行为
浙公网安备 33010602011771号