Intent的7种属性
来源:互联网 发布:西数移动硬盘在无网络 编辑:程序博客网 时间:2024/05/22 03:02
强调!!!以下只是我个人看法,如有错误的地方请文明指出,如有其他看法请耐心讨论,如有看不懂可以参考其他有关博客,最后如有想喷的出门左转不谢。
intent对象大致包含Component(ComponentName)、Action、Category、Data、Type、Extra和Flag这7种属性。intent是“意图”的意思,可以启动指定的组件,至于启动那个组件是根据intent的各种属性决定的。
可以分为三类:
第一类:启动,有ComponentName(显式),Action(隐式),Category(隐式)。
第二类:传值,有Data(隐式),Type(隐式),Extra(隐式、显式)。
第三类:启动模式,有Flag。
一、Component属性:可以显示的启动指定组件,可以再同个app下,也可在不同app下
Intent的Component的属性需要接受一个ComponentName对象,ComponentName对象包含如下几个构造器:
ComponentName(String pkg,String cls):创建pkg所在包下的cls类所对应的组件。
ComponentName(Context pkg,String cls):创建pkg所对应的包下的cls类所对应的组件。
ComponentName(Context pkg,Class<?> cls):创建pkg所在包下的cls类所对应的组件。
除此之外,intent还包含如下三种方法:
setClass(Context packageContext,Class<?> cls):设置该intent将要启动的组件对应的类。
setClassName(Context packageContext,String className):设置该intent将要启动的组件对应的类名。
setClassName(String packageContext,String className):设置该intent将要启动的组件对应的类名。
例通过显示intent启动另一个Activity(1,2,3等同):
1、
//创建一个ComponentName对象
ComponentName comp = new ComponentName(MainActivity.this,OtherActivity.class);
Intent intent = new Intent();
//为Intent设置一个Component属性
intent.setComponent(comp);
startActivity(intent);
2、
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
3、
Intent intent = new Intent();
intent.setClass(this,OtherActivity.class);
startActivity(intent);
OtherActivity中获取该activity对应的Intent的Component属性:ComponentName comp = getIntent().getComponent();
获取该ComponentName对象的包名、类名:comp.getPackageName();comp.getClassName();
二、Action、Category属性:
Action代表该intent所要完成得一个抽象“动作”,而Category则用于为Action增加额外的附加类别信息,通常Action与Category属性结合使用。
Action是要完成一个抽象的动作,这个动作具体由那个组件来完成,Action本身并不管。这取决于Activity的<intent-filter.../>配置,只要某个Activity的<intent-filter.../>配置中包含了Action提供的Intent.ACTION_VIEW,该activity可能被启动。Intent通过指定的Action属性(属性值其实就是一个普通的字符串),就可以把该Intent与具体的Activity分离,从而提供高层次的解耦。
例intent的Action属性;
在配置文件中需要在被启动的activity中加入<intent_filter.../>的子元素<action.../>当程序创建Intent的时候,该intent默认启动Category属性值为Intent.CATEGORY_DEFAULT(常量值为android.intent.category.DEFAULT)的组件。
Category同Action一样,但是一个Intent对象最多只用一个Action属性,程序可调用Intent的setAction(String s)的方法来设置Action的属性值,但是一个Intent对象可以包括多个Category属性,程序可以用Intent的addCategory(String s)方法来为Intent添加Category属性。
三、Data、Type属性:
Data属性通常用于向Action属性提供操作的数据。Data属性接受一个Uri对象,一个Uri对象通常通过如下字符串的形式来表示:
content://com.android.contacts/contacts/1
tel:123
Uri字符串满足如下格式:
scheme://host:port/path
上面的content://com.android.contacts/contacts/1,其中content是scheme的部分,com.android.contacts是host的部分,part的部分被省略了,/contacts/1是path的部分。
Type属性用于指定该Data属性所指定Uri对应的MIME类型,这种MIME类型可以是任意自定义的MIME类型,只要符合abc/xyz格式的字符即可。
Data属性与Type属性吧会相互覆盖,如果intent先设置Data属性后设置Type属性,那么type属性会把Data属性覆盖掉。
如果希望两个属性都用那么要使用intent.setDataAndaType()方法。
在配置文件中为组件声明Data和Type属性都通过<data.../>元素,格式如下:
<Data
android:mimeType = ""
android.scheme = ""
android.host = ""
android.port = ""
android.path = ""
android.pathPrefix = ""
android.pathPattern = ""
/>
android:mimeType = "":为声明该组件所能匹配的Intent的Type属性。
android.scheme = "":用于声明该组件所能匹配的Intent的Data属性的scheme部分。
android.host = "":用于声明该组件所能匹配的intent的Data属性的host部分。
android.port = "":用于声明该组件所能匹配的intent的Data属性的port部分。
android.path = "":用于声明该组件所能匹配的intent的Data属性的path部分。
android.pathPrefix = "":用于声明该组件所能匹配的intent的Data属性的path前缀。
android.pathPattern = "":用于声明该组件所能匹配的intent的Data属性的path字符串模板。
在Intent的Data属性中并不要求<data../>子元素scheme、host、port、.path完全满足,但是要遵循以下规则:如果目标组件的<data.../>子元素只指定了android.scheme属性,那么只要Intent的Data属性的scheme部分与android.scheme属性值相同,即可启动该组件。
如果目标组件的<data.../>子元素指定了android.scheme、android.host属性,那么只要Intent的Data属性的scheme、host部分与android.scheme、android.host属性值相同,即可启动该组件。
如果目标组件的<data.../>子元素指定了android.scheme、android.host、android.port属性,那么只要Intent的Data属性的scheme、host、port部分与android.scheme、android.host、android.port属性值相同,即可启动该组件。如果<data.../>元素只有android.port属性,没有指定android.host属性,那么android.port属性将不会起作用。
如果目标组件的<data.../>子元素指定了android.scheme、android.host、android.path属性,那么只要Intent的Data属性的scheme、host、path部分与android.scheme、android.host、android.path属性值相同,即可启动该组件。如果<data.../>元素只有android.path属性,没有指定android.host属性,那么android.path属性将不会起作用。
如果目标组件的<data.../>子元素指定了android.scheme、android.host、android.path、android.port属性,那么只要Intent的Data属性的scheme、host、path、port部分与android.scheme、android.host、android.path、android.port属性值相同,即可启动该组件。
四、Extra属性:
Intent的Extra属性通常用于在多个Action之间进行数据交换。Intent的Extra属性相当于一个Bundle对象,Bundle对象就像一个Map对象,它可以存入多个键值对,这样就可以通过Intent在不同Activity之间进行数据交换。
五、Flag属性:
Intent的Flag属性用于为该Intent添加一些额外的控制旗标,Intent可以调用addFlag()方法来添加控制旗标。
以上借鉴了《疯狂Android讲义》第三版第五章
- Intent的7种属性
- **android Intent 的Componet ,Action ,Category,Data,Type,Extra,Flag 7种属性详解
- 06 intent flag三种属性
- Intent下的FLAG几种属性和启动模式详解
- position的4种属性
- position的几种属性
- Interpolator的几种属性
- Hibernate session FlushMode的种属性
- Spring 几种属性的注入
- Hibernate generator的七种属性
- Spring中几种属性的配置
- android:visibility的三种属性
- OC--三种属性可见度的区别
- MenuItem的setAsAction四种属性解析
- android:visibility的三种属性
- JSP的四种属性范围
- 【Hibernate】lazy的三种属性
- Position 的四种属性值
- UVA11520 Fill the Square 枚举
- 状态模式
- CC2640之OAD固件升级(内置Flash)手动配置ImageB
- Win下 C++版SDM(Supervised Descent Method)算法实现
- 编程相关的书籍(近期阅读)
- Intent的7种属性
- 中大东校园的H3C如何在路由器上使用
- Intel汇编语言程序设计学习-第六章 条件处理-上
- mui开发需要对照这几个这几个页面进行开发
- SURF特征点匹配(阈值、绘点方式、匹配方式均可通过滚动条调节)
- Ubuntu下tar命令的使用详解
- 测试服务套接字可能遇到的问题(端口,telnet)
- eclipse中所有项目出现红色感叹号
- 网页布局之结构与表现原则