一、Intent的作用
当Activity需要启动另一个Activity时,程序并没有直接给出需要启动那个Activity,而是通过Intent来表达自己想要启动哪个Activity。除此之外,Intent还能够实现两个Activity之间的数据交换。
二、Intent的属性
1.Component属性:指定Intent的目标组件的类名称。即是,在Intent查找组件可以使用ComponentName进行显式的查找,即是指定了Component属性的Intent已经明确了它要启动哪个组件。组件的名称包括了包的名称和类的名称,而包的名称和类的名称都会声明在AndroidManiferst.xml文件中。
使用Component打开另一个Activity的步骤为:
I:使用ComponentName(String pkg, String cls)来创建一个Component对象。
II:使用setClass()、setComponent()、setClassName()来进行设置启动相应的Activity。
III:startActivity(Intent)来启动相应的Activity。
2.Action属性:Action属性就是一个字符串常量,Action属性代表该Intent所要完成的一个抽象的“动作”。而具体实现这个“动作”的组件它本身并不会管,比如说ACTION_VIEW表示一个抽象的查看的动作,但是谁来实现这个动作Action它本身并不管。而能实现这个“动作”的组件都有一个共同的特点,就是都会在它们各自的Activity的<intent-filter.../>配置中包含该ACTION_VIEW。Ps:一个Intent对象最多能够包含一个Action属性。
使用Action查找符合条件的Activity的步骤为:
I:创建你想要满足条件的Action的字符串常量,比如说“Intent.ACTION_VIEW”。
II:设置Action属性,使用intent.setAction(String str)来进行设置。
III:启动activity。
3.Category属性:Action的附加信息,也就是Intent想要完成的抽象“动作”的条件被Category属性补充的更加具体。Category也是一个字符串常量。Ps:一个Intent对象可以包含很多个Category属性,使用AddCategory(String str)来添加新的Category属性/Ps。
I:创建你想要满足条件的Category字符串常量,比如说“Intent .CATEGORY_HOME”。
II:设置Category属性,使用intent.addCategory(String str)来进行设置。
III:启动activity。
4.Data属性:Data属性通常用于向Action属性提供操作的数据。Data属性接收一个Uri对象,一个Uri对象通常通过这种类型的字符串来表示:scheme://host:port/path。例如content://com.android.contacts/contacts/1,这里省略了port部分。
5.Type属性:Type属性用于指定该Data属性所指定的Uri对应的MIME类型,这种MIME类型可以是任何自定义的MIME类型,只要符合ABC/XYZ格式的字符串即可。
Ps:Data与Type属性的关系是这两个属性会相互覆盖。如果先设置Data属性,后设置Type属性的话,Type属性会覆盖Data属性;相反同理;如果想要Data和Type一起存在话,需要调用Intent的setDataAndType()方法。/Ps
Ps:在AndroidManiferst.xml文件中为组件声明Data和Type属性都通过<data.../>元素。<data.../>元素的格式如下:
<data android:mimeType=""
android:scheme=""
android:host=""
android:port=""
android:path=""
android:pathPrefix=""
android:pathParttern=""
/>
其中:mineType用于声明该组件所能匹配的intent的Type属性。
pathPrefix用于声明该组件所能匹配的intent的Data属性的path前缀。
pathPattern用于声明该组件所能匹配的intent的Data属性的path字符串模板。
对Data属性匹配的说明:Data属性的Uri对象实际上可分为scheme、host、port和path部分,此时并不要求被启动组件的<intent-filter.../>中的<data.../>子元素中的四个属性全部满足。具体说明如下:
1.如果目标组件的<data.../>子元素只指定了android:scheme属性,那么只要intent的Data属性的scheme部分与其相同即可启动该组件。
2.如果目标组件的<data.../>子元素只指定了android:scheme、android:host属性,那么只要intent的Data属性的scheme和host部分与其相同即可启动该组件。
3.接下来的匹配都一样。。
4.说明:如果目标组件的<data.../>只指定android:port属性而不指定android:host属性,那么android:port属性将不会起作用。
/Ps
6.Extra属性:Extra属性常用于多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,Bundle对象就像一个Map对象,它可以存入多组key-value对,这样就可以通过intent在不同的Activity之间进行数据交换了。
7.Flag属性:Flag属性用于该Intent添加一些额外的控制旗标,Intent可以调用addFlags()方法来为Intet添加控制旗标。