android的应用程序包含三种重要的组件:Activity、Service、BroadcastReceiver,应用程序采用一致的方式来启动他们——都是依靠Intent来进行启动。Intent就封装了程序想要启动的程序意图,不仅如此,Intent还可用于与被启动组件交换信息。

Intent的属性及intent-filter配置:

Intent的Component属性需要接受一个ComponentName对象,ComponentName对象包含如下几个构造器:

1、ComponentName(String pkg, String cls):创建pkg所在包下的cls类对应的组件

2、ComponentName(Context pkg, String cls):创建pkg所对应的包下的cls类所对应的组件

3、ComponentName(Context pkg, Class<?> cls):创建pkg所对应的包下的cls类所对应的组件

上面构造器的本质就是一个,这说明创建一个ComponentName需要指定包名和类名——这就可以唯一地确定一个组件类,这样应用程序即可根据给定的组件类去启动特定的组件。

ComponentName comp = new ComponentName(this, NewActivity.class);
Intent intent = new Intent();
intent.setComponent(comp); startActivity(intent);

上面的也可以写成如下的形式:

Intent intent = new Intent(this, NewActivity.class);

当程序通过Intent的Component属性(明确指定启动那个组件)启动组件时,被启动的组件几乎不再需要使用<inetnt-filter....../>元素进行配置了。

Action、Category属性与intent-filter配置

Intent intent = new Intent();
// 为Intent对象设置Action属性(属性值是一个普通的字符串)
intent.setAction("helloworld");
startActivity(intent);

上面的代码会根据Intent来启动Activity,但是Intent并未以“硬编码”的方式指定要启动那么Activity,程序到底会启动那个Activity这取决于Activity配置中<intent-filter....../>元素的配置。

<inetnt-filter....../>元素里通常可包含如下的子元素:

1、0~N个<action....../>子元素

2、0~N个<categtory....../>子元素

3、0~1个<data....../>子元素

一个Intent对象只能包含一个Action属性,程序可以调用Intent的setAction(String str)方法来设置Action属性,但是一个Intent对象可以包含多个Category属性,程序可以调用Intent的addCategpry(String str)方法添加Category。当程序创建Intent时,该Intent默认启动Category属性值为Intent.CATEGORY_DEFAULT常量(常量的值为android.intent.category.DEFAULT)的组件。当Activity配置中的<action....../>中有一个和Intent中的action属性相同时,就表明该Activity能响应该Intent。

可以通过指定Action、Category调用系统的Activity。

Data、Type属性与intent-filter配置:

Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象,一个Uri对象通常如下形式的字符串来表示:

content://com.android.contacts/contacts/1

tel:123

上面所示的两个字符串的冒号前面大致指定了数据的类型,冒号后面的是数据部分。因此一个合法的Uri对象既可以决定操作那种类型的数据,又可指定具体的数据值。

Type属性则用于明确指定Data属性指定数据的类型或者MIME类型。

实际上Data属性值可以分为两部分:数据类型部分和数据部分。例如:content://com.android.contacts/contacts/1

content:前缀:表明该数据类型为联系人信息。

//com.android.contacts/contacts/1:表明操作_id为1的联系人数据

一旦为Intent同时指定了Action、Data属性,那么android讲可根据指定的数据类型来启动特定的应用程序,并对指定的数据执行相应的操作。

Extra属性:

Intent的Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值是一个Bundle对象,Bundle对象就像一个Map对象,可以存放多组key-value对,这样就可以通过在不同的Activity之间进行数据交换。

最新文章

  1. c++作用域运算符---7
  2. Contacts群组添加成员,多选列表过滤已添加数据
  3. 数据库SQL CRUD
  4. 利用HTML5开发Android(1)---Android设备多分辨率的问题
  5. TWaver初学实战——如何在EasyUI中插入TWaver(续)
  6. MongoDB笔记(五)深入学习
  7. 微信JS-SDK实际分享功能
  8. pycharm快捷键(转载)
  9. C语言 数组名不是指针
  10. AngularJs 笔记
  11. 人生第一个过万 Star 的 github 项目诞生
  12. Go语言的通道(2)-缓冲通道
  13. Educational Codeforces Round 43 (Rated for Div. 2)
  14. Hibernate向数据库存入BLOB和CLOB类型的数据
  15. js中的全局变量
  16. cf188C(最大子段和&amp;&amp;思维)
  17. 在linux下搭建python+django环境
  18. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例
  19. 2017-2018-1 20155321《信息安全技术》实验二——Windows口令破解
  20. 【Linux 命令】- more和less

热门文章

  1. Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
  2. 第一节:mybatis入门
  3. csdn加入暂时会话功能
  4. JSON 和 xml 浅读
  5. python之chardet验证编码格式
  6. HTML + CSS (下)【更新中】
  7. 运行连接Oracle数据库时,Idea报错: Error : java 不支持发行版本5
  8. MVC模式和MVVM模式简单理解
  9. 线程池——Executors
  10. leetcood学习笔记-26-删除排序数组中的重复项