您的位置:首页 > 移动开发 > Android开发

Android中Intent详解

2016-05-28 14:51 381 查看
Intent是“意图”的意思,是Android中用来启动组件的,也是Android

中用于组件之间的通信的。

Intent的属性

Intent有很多的属性,每一个属性都有其特定的作用。

(1)Component属性

Intent的Component属性是用来指明Intent要启动哪个组件的。

Intent的Component属性需要接受一个ComponentName对象。ComponentName有以下几个构造方法:

ComponentName(Context pkg,Class< ? > cls);

ComponentName(Context pkg,String cls);

ComponentName(String pkg,String cls);

ComponentName的构造方法都是创建指定包下的指定类对应的组件。

Intent的setComponentName()方法用来设置Intent的Component属性。指定了Component属性的Intent,是明确了要启动哪个组件,因此这种Intent又被称之为显示Intent。没有设置Component属性的Intent被称之为隐式Intent,隐式Intent是没有明确指定要启动哪个组件,隐式Intent会根据指定的规则启动符合条件的组件。

Intent中以下几个方法也可以设置Intent要启动的组件:

setClass(Context pkg,Class< ? >cls)

setClassName(Context pkg,Stirng cls)

setClassName(String pkg,String cls)

(2)Action、Category属性

Intent的Action、Category属性的属性值都是一个普通的字符串。Action属性表示Intent将要完成的一个“抽象”动作。Category属性则用于为Action添加额外的附加类别信息。通常Action、Category属性都是结合使用的。

Intent分别通过setAction()方法和addCategory()方法来设置Intent的Action和Category属性。

我们可以这样来理解Intent的Action、Category属性:

Action、Category属性可以被看做是“要求”,一个Intent只能设置一个Action要求,可以设置多个Category要求,通过< intent-filter >属性来设置组件能够满足的要求。一个组件可以满足多个Action要求、多个Category要求。如果组件满足的要求大于等于Intent指定的要求,那么Inten就可以启动这个组件。

但是这里要注意一点,但我们创建Intent对象时,Intent对象就有一个默认的category属性,属性值为android.intent.category.DEFAULT,所以目标组件的< intent-filter >配置中,至少要配置一个< category >属性-< category name=”android.intent.category.DEFAULT”/>。

在AndroidManifest.xml中组件配置的< intent-filter >中通过

< action name=”” >

< category name=”” >

来配置组件满足的Action与Category要求。

(3)Data、Type属性

Intent的Data属性是用来为Action提供操作数据的,Data属性接收一个Uri对象,Uri字符串满足如下格式:

schema://host:port/path

有时候port是被省略的。

Type属性是用于指定Data属性指定的Uri的MIME类型,这种MIME类型可以是任何自定义的MIME类型,只要符合abc/xyz格式的字符串即可。

Data属性与Type属性的关系比较微妙,这两个属性会相互覆盖。

1)如果Intent先设置Data属性,再设置Type属性,那么Data属性会被覆盖,也就相当于只设置了Type属性。

2)如果Intent先设置了Type属性,再设置Data属性,那么Type属性会被覆盖,也就相当于只设置了Data属性。

3)如果希望Intent既有Data属性又有Type属性,可以调用Intent的setDataAndType()方法。

Data、Type属性与Action、Category属性一样都可以被理解成“要求”,组件满足的要求必须大于等于Intent指定的这些要求,Intent才能够启动这个组件。

组件在配置Data、Type与组件配置Action、Category是一样的,都是在AndroidManifest.xml中的组件的配置的< intent-filter >中配置。

Data与Type属性都是用< data/>这个标签来配置的。

< data

android:schema=””

android:host=””

android:port=””

android:path=””

>

(4)Extra属性

Intent的Extra属性用于携带数据的。当需要传递数据到启动的组件中时,就可以使用Extra属性。

Intent可以携带基本类型的数据,String类型的数据,可以携带一个列表,也可以携带自定义对象类型的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Intent