一、Intent对象的作用和构成
作用:
Intent对象是组件间通信信息的载体。它封装了调用组建提供的指令和数据,通过组建管理服务序列化传递给实现组件,实现组件可以利用这些信息完成所需要的功能。
构成:
Intent对象的作用都是通过她的实现和设计体现出来的。从数据构成来看,Intent类非常的简单,她并没有包含复杂的逻辑功能,只是包含着若干个数据项。
这里通过解析一句话来理解这若干个数据项
如果我吃饱了,我就去打篮球
Intent intent=new Intent(MainActivity.this,Activity2.class);
其中“我”代表着意图机制下的调用组件(MainActivity.this)
“打“代表着意图机制下的Action
”篮球“代表着Data
“球”代表着Type
“如果我吃饱了”代表了category
Action项
Action就相当于我们日常生活中的动作,动词,代表上面语句的“打”这个动作。
Action是一个字符串,可以调用Intent.setAction函数为Intent对象指定一个动作,也可以通过Intent.getAction函数读取Intent对象中的动作信息。为了保持动作的唯一性和实现的可扩展性。Action的命名格式遵循java包的命名规范。比如这里定义一个“吃”动作:
com.hyz.test.action.ACTION_EAT
其中,com.hyz.test是应用的包名,action表示定义的是一个Action动作,而ACTION_EAT,则具体指明了改动做的含义“吃”。
在android的Intent类中,定义了很多标准的动作,比如:Intent.ACTION_VIEW、Intent.ACTION_PIC等。这些标准的动作约定了Android组件间的通信规范,保证了组件系统的可扩展性,使得那些相互独立的组件能够通过这些标准的Action信息彼此沟通。
如果系统预设的这些“标准动作”不能满足应用的要求,则各个应用都可以自行定义扩展。但与这些标准的相比,自定义的Action不常用在跨应用的通信中,而仅应用于应用的内部。
Data项
Data是名词,对应着日常生活中的宾语,代表这上面解析语句的“篮球”。
当发起请求是,调用组件如果有明确的数据对象,通常就会用Data项来 存储表示。
Data数据,可以通过Intent.setData或者Intent.setDataAndType来进行设置,通过Intent.getData函数来读取。
data数据也是用字符串来进行存储的,他的格式符合URI标准。URI具有丰富的表达能力,能够表达存储在任何地方的数据。比如,存放在本地文件系统中的数据可以通过URI来表示:
# 位于本地目录/sdcard/下的sample.data文件
file:///sdcard/sample.data
同样,存放在数据源组件中的数据也可以通过URI来表示:
#数据源组件com.hyz.providers.smaple中id为1的数据:
content://com.hyz.providers.sample/1
甚至,一个存放在web上的数据,同样也可以通过URI来描述:
# 域名flyevnus.net中的sample.data文件
http://flyvenus.net/sample.data
这样,通过URI来描述数据,使得Intent对象不仅能够用来请求本地的组件服务,通过还可以请求Web服务,将本地服务和Web服务有机地结合在一起。
Type项
Data用来特指某一个具体的事物,比如说“我打篮球”,篮球就是具体的事物。
Type用来泛指某一类事物,比如说“我打球”,球是泛指,可以是篮球,可以羽毛球,可以是兵乓球…
在Intent对象中,系统可以通过Intent.setType或Intent.setDataAndType函数设定Type信息,可以调用Intent.getType函数获取该对象的Type信息。Type是MIME格式的字符串数据,可以面熟组件能够处理的请求类型,或者补充说明Data数据的类型。同可以通过通配符 ”*“ 来表示整个类的信息,比如
#用MIME表示图片类型的数据:
image/*
也可以更具体地指明特定子类别:
# 用MIME表示jpg图片类型的数据:
image/jpg
注意:
在Intent对象中,Data项和Type项很多时候是互斥使用的。当调用Intent.setType时,之前设定的Data信息就会被清空;反过来,调用Intent.setData时,Type信息也会被清除。
在一个Intent中,需要用Data来表示数据还是用Type来表示数据类型通常是和Action密切联系的