当Intent在组件间传递时,组件如果想告知Android系统自己能够响应和处理哪些Intent,那么就需要用到IntentFilter对象。
顾名思义,IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。 IntentFilter实行“白名单”管理,即只列出组件乐意接受的Intent,但IntentFilter只会过滤隐式Intent,显式的Intent会直接传送到目标组件。 Android组件可以有一个或多个IntentFilter,每个IntentFilter之间相互独立,只需要其中一个验证通过则可。除了用于过滤广播的IntentFilter可以在代码中创建外,其他的IntentFilter必须在AndroidManifest.xml文件中进行声明。
IntentFilter中具有和Intent对应的用于过滤Action,Data和Category的字段,一个隐式Intent要想被一个组件处理,必须通过这三个环节的检查。
一:检查 Action 尽管一个Intent只可以设置一个Action,但一个Intentfilter可以持有一个或多个Action用于过滤,到达的Intent只需要匹配其中一个Action即可。 深入思考:如果一个Intentfilter没有设置Action的值,那么,任何一个Intent都不会被通过;反之,如果一个Intent对象没有设置Action值,那么它能通过所有的Intentfilter的Action检查。
二:检查 Data 同Action一样,Intentfilter中的Data部分也可以是一个或者多个,而且可以没有。每个Data包含的内容为URL和数据类型,进行Data检查时主要也是对这两点进行比较,比较规则: 如果一个Intent对象没有设置Data,只有Intentfilter也没有设置Data时才可通过检查。 如果一个Intent对象包含URI,但不包含数据类型:仅当Intentfilter也不指定数据类型,同时它们的URI匹配,才能通过检测。 如果一个Intent对象包含数据类型,但不包含URI:仅当Intentfilter也没指定URL,而只包含数据类型且与Intent相同,才通过检测。 如果一个Intent对象既包含URI,也包含数据类型(或数据类型能够从URI推断出),只有当其数据类型匹配Intentfilter中的数据类型,并且通过了URL检查时,该Intent对象才能通过检查。
其中URL由四部分组成:它有四个属性scheme、host、port、path对应于URI的每个部分。
例如:content://com.wjr.example1:121/files
scheme部分:content
host部分:com.wjr.example1
port部分:121
path部分:files
host和port部分一起构成URI的凭据(authority),如果host没有指定,那port也会被忽略。
这四个属性是可选的,但他们之间并不是完全独立的。要让authority有意义,scheme必须要指定。要让path有意思,scheme和authority必须指定。 Intentfilter中的path可以使用通配符来匹配path字段,Intent和Intentfilter都可以用通配符来指定MIME类型。
三:检查 Category Intentfilter中可以设置多个Category,Intent中也可以含有多个Category,只有Intent中的所有Category都能匹配到Intentfilter中的Category,Intent才能通过检查。也就是说,如果Intent中的Category集合是Intentfilter中Category的集合的子集时,Intent才能通过检查。如果Intent中没有设置Category,则它能通过所有Intentfilter的Category检查。 如果一个Intent能够通过不止一个组件的Intentfilter,用户可能会被问那个组件被激活。如果没有目标找到,会产生一个异常。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wjr2012/archive/2011/02/24/6205725.aspx
分享到:
相关推荐
6. **IntentFilter与Intent**:Intent是Android中对象间通信的重要工具,IntentFilter则定义了对Intent的响应规则。理解这两者能帮助开发者实现组件间的灵活调用。 7. **Fragment**:Fragment是Android 3.0版本引入...
《Android应用框架原理与程序设计(简体中文版)》这本书深入探讨了Android应用程序开发的核心——Android应用框架,以及如何利用这些原理进行高效且优化的程序设计。Android应用框架是Android系统的重要组成部分,它...
在Android系统中,应用框架是开发者构建应用程序的基础,它定义了Android应用的生命周期、组件间交互以及与其他系统服务的通信方式。理解其原理对于提升Android开发技能至关重要。 Android应用框架主要包括四大组件...
本资源"安卓Android源码——Android模仿乐淘的应用程序分析源码.zip"提供了一个基于Android平台模仿乐淘电子商务应用的源代码分析,旨在帮助开发者更直观地学习和掌握Android应用开发的核心技术。 乐淘是中国知名的...
本资料包“Android源码——“遇见”android应用源码.zip”提供了一个名为“遇见”的Android应用的完整源代码,这为学习和分析Android应用的运行机制提供了宝贵的实践材料。下面我们将详细探讨这个源码中涉及的一些...
在Android应用开发中,...通过理解和掌握这些广播相关的知识点,开发者可以有效地在Android应用中实现跨组件通信、系统事件监听以及各种后台服务的触发。在实际开发中,合理运用广播可以提高应用的响应能力和用户体验。
Android组件是Android应用程序开发中的核心组成部分,它们构成了Android四层架构的最高层——应用层。Android系统提供了四个主要的组件:Activity、Service、BroadcastReceiver和ContentProvider,这四者共同构成了...
### 使用Eclipse开发Android应用程序:全面指南 #### 引言 在移动应用开发领域,Eclipse曾一度被视为首选集成开发环境(IDE),特别是在Android应用程序的早期发展阶段。本篇深度解析将带您深入了解如何利用...
Intent是Android中的一个类,它是应用程序组件间通信的重要桥梁。它可以携带数据,启动或启动并传递消息给Activity、BroadcastReceiver、Service等组件。 2. **Intent的创建**: 创建Intent通常有两种方式:显式...
Intent在Android开发中扮演着至关重要的角色,它是应用程序组件间通信的主要手段。因此,我们可以推测这个项目可能专注于解析和理解Intent的工作机制。 【描述解析】 描述信息与标题相同,暗示了压缩包中的内容是...
在Android操作系统中,Intent是一种非常核心的组件,它充当了应用程序之间、组件之间通信的桥梁。Intent不仅可以用于启动一个新的Activity,还可以启动Service、BroadcastReceiver,甚至可以传递数据。本资料...
在安卓Android平台上,Widget是应用程序的一种重要组成部分,它允许用户在主屏幕上直接操作,而无需打开完整的应用程序。这个“安卓Android源码——Widget快捷拨号程序源码.zip”压缩包包含了一个实现快速拨号功能的...
BroadcastReceiver是Android系统中用于组件间通信的一种重要机制,它允许应用程序在不直接相互依赖的情况下交换数据和事件。BroadcastReceiver可以接收系统或应用程序自定义的广播Intent,从而响应各种事件,比如...
首先,理解Android中的短信服务主要依赖于两个核心组件:`SmsManager`类和`BroadcastReceiver`。`SmsManager`是Android SDK提供的一个接口,用于发送短信。而`BroadcastReceiver`则用于监听和接收短信事件,例如接收...
- **意图(Intent)**和**意图过滤器(IntentFilter)**:Intent用于在应用程序内部或与其他应用程序进行通信;IntentFilter则定义了哪些Intents会被接收。 - **意图接收器(BroadcastReceiver)**:用于接收广播...
在Android开发领域,API(应用程序接口)扮演着至关重要的角色,它是开发者与操作系统交互的桥梁。这份"Android开发手册——API函数详解.zip_安卓API"资料深入浅出地阐述了Android API的各种函数用法,是Android应用...
通过研究EIM源码,开发者可以深入理解Android应用程序的架构设计、组件交互、数据管理和网络通信等核心概念,这对于提升个人技能和开发更高质量的Android应用非常有帮助。同时,也可以借鉴其设计模式,为自己的项目...
- Intent是Android系统中组件间通信的主要手段,EyeRoom可能使用Intent启动其他Activity或Service。IntentFilter则定义了应用对特定Intent的响应规则,这在解析BroadcastReceiver时尤为关键。 6. **...
**隐式Intent**:通过IntentFilter匹配组件,通常用于跨应用程序通信。IntentFilter会基于Action、Data和Category属性来筛选出合适的组件。 #### Intent相关属性详解 在构建Intent时,了解其关键属性对于正确传递...