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

转载于:https://www.cnblogs.com/heml/p/3564767.html

android Intent和IntentFilter相关推荐

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

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

  2. Android中的Intent和Intent-filter总结

    一.相关概念 (一)基本概念 Intent中文意思指"意图",按照Android的设计理念,Android使用Intent来封装程序的"调用意图",不管启动Ac ...

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

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

  4. Android Intent setAction的使用注意

    Action 的作用: 设置要执行的常规操作,一般在界面的隐式跳转(跳转到拨打电话界面等操作),服务,广播, Action用在隐式跳转使用 java 代码 Intent intent = new In ...

  5. android之android.intent.category.DEFAULT的用途和使用

    1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...

  6. 描述一下 Intent 和 IntentFilter?

    Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消 息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的 ...

  7. Android -- Intent

    Intent                                                                                       Android ...

  8. Intent以及IntentFilter详解

    1. 前言 在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度.Intent是信息的载体,用它可以去请求组件做相应的操作,但是相 ...

  9. (转)理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER

    其中Android.intent.action.MAIN 与 android.intent.category.LAUNCHER 决定应用程序在luncher中的显示方式: 两者的作用如下: andro ...

最新文章

  1. cto denalil
  2. E. coli Bacterial Assembly 大肠杆菌
  3. android tabhost --android UI 学习
  4. 这 17 个 JVM 参数,高级 Java 必须掌握!
  5. arthas案例:哪个controller处理了请求?每个请求的调用参数和返回值是多少?
  6. Netty之Channel的继承关系
  7. Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)
  8. mysql用大白话解释_Java基础--2021Java面试题系列教程--大白话解读
  9. 学C语言好,还是学C++好呢?这两个专业在哪些领域用得最多?
  10. 我的美丽天使(My Fair Angel)全剧情攻略
  11. Java 简单TCP文件传输
  12. 通达信公式解密工具5.05
  13. 项目思维导图软件测试分析,在软件测试中使用思维导图技术
  14. ps play android下载地址,PSPlay
  15. 实现DNS主从复制、子域、转发、智能DNS
  16. Angel-Eye: A Complete Design Flow for MappingCNN onto Embedded FPGA
  17. python 接收外部参数_python 接收处理外带的参数方法
  18. 立统 视频防泄密系统 技术白皮书2021-07-16
  19. 2020无人用的邮箱和密码大全_Amazon后台登录密码错误!如何辨别账号是否被冻结?...
  20. Metasploit 渗透测试手册第三版 第三章 服务端漏洞利用(翻译)

热门文章

  1. rem布局 html,移动端h5之rem布局/px2rem
  2. (DFS)棋盘问题(poj1321)
  3. c# url传参不能包含html标签,c#解析包含HTML特殊字符的字符串XElement
  4. mysql undrop_MySQL 如何对InnoDB使用Undrop来恢复InnoDB数据
  5. html实现动态多表单输入,使用javascript动态编辑多个相同的HTML表单
  6. HTML+CSS+JS实现React简单的计算器实例
  7. 全连接层的作用_python构建计算图2——全连接层
  8. html添加工具栏,添加带有命令的工具栏 (HTML)
  9. android 教程概要,Android精通教程-第一节Android入门简介
  10. Java 在指定目录中查找文件