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之间进行数据交换。

android Intent和IntentFilter的更多相关文章

  1. Android Intent和IntentFilter详解与使用及实现系统“分享”接口

    Intent Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到 ...

  2. [转]android笔记--Intent和IntentFilter详解

    Intent用于启动Activity, Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介. 使用Intent启动组件的优势1, Intent为组件的启 ...

  3. Android开发之隐式Intent中Intent-filter的三个属性-action,category,data

    使用隐式Intent时,需要使用到意图过滤器Intent-filter.Intent-filter含有三个属性:action,category,data.通过这三个属性的组合,可以启动想要启动的act ...

  4. android学习日记20--连接组件之Intent和IntentFilter

    上次刚了解完Android的四大组件,现在学习组件间通信的Intent和IntentFilter 一.Intent 1.简述 Intent(意图)在应用程序运行时连接两个不同组件,是一种运行时的绑定机 ...

  5. Android两个注意事项.深入了解Intent和IntentFilter(两)

    深入理解Intent和IntentFiler(二) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)     在上一篇文章中,我们比較具体学习了&q ...

  6. Android应用程序组件之间的通信Intent和IntentFilter

    Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...

  7. Android的Intent和IntentFilter应用说明一例

    很多人对文档中的Intent和IntentFilter不理解是什么意思,我这里举例解释下. Intent字面意思就是目标,目的.通俗一点,需要达成某些目标,则需要提供一些动作,这些目标的分类,以及达成 ...

  8. android笔记--Intent和IntentFilter详解

    本文转载自:https://www.cnblogs.com/liushengjie/archive/2012/08/30/2663066.html 本文转载自:https://www.cnblogs. ...

  9. android Intent介绍

    Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 ...

随机推荐

  1. Windows10安装好Visual Studio2017后,找不到MFC向导

    前段时候在Windows10中安装好Visual Studio2017后,想创建一个基于MFC的对话框应用,发现无法找到MFC开发向导选项,很是奇怪,以前使用VC6.0或者Visual Studio2 ...

  2. awk 按小时 统计接口调用次数

    #统计所有接口总量awk -F ' ' '{a[$7]++} END{for(i in a){print i,a[i] | "sort -r -k 7"}}' accesslog/ ...

  3. spring boot MVC

    1 spring boot的用途 第一,spring boot可以用来开发mvc web应用. 第二,spring boot可以用来开发rest api. 第三,spring boot也可以用来开发w ...

  4. 使用WdatePicker时间插件简单的控制页面上两个时间选择的前后范围

    很多时候我们在一个交互的页面上需要显示两个时间让客户填写,比如开始时间&结束时间,顾名思义开始肯定不能大于结束,故使用WdatePicker插件选择时间的话可以很好的做好时间段的控制.看下面一 ...

  5. Laravel groupBy用法

    // 假设model名是News:status启用是1:language选择cn: $data = News::select(array('id', 'title', 'type')) ->wh ...

  6. 【leetcode】328. Odd Even Linked List

    题目如下: Given a singly linked list, group all odd nodes together followed by the even nodes. Please no ...

  7. Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式

    一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...

  8. NX二次开发-MFC对话框获取UG界面句柄,设置MFC对话框在UG界面固定显示位置

    extern "C" DllExport void ufusr(char *param, int *retcod, int param_len) { if (UF_initiali ...

  9. [SCOI2009]迷路(矩阵快速幂) 题解

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  10. (转)浅谈C中的malloc和free

    原帖及讨论:http://bbs.bccn.net/thread-82212-1-1.html 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数 ...