当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,用户可能会被问那个组件被激活。如果没有目标找到,会产生一个异常。

引用:http://www.cnblogs.com/skynet/archive/2010/07/20/1781644.html

Android应用程序组件间通信(二)——IntentFilter类简介相关推荐

  1. android 多线程间通信,android实现线程间通信的四种常见方式

    1,通过Handler机制 主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递conten ...

  2. Android各组件/控件间通信利器之EventBus

    实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相 互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于 ...

  3. android组建之间通信_Android各组件/控件间通信利器之EventBus

    实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每 ...

  4. 【Android】线程间通信——Handler消息机制

    文章目录 引言 Java层 永动机跑起来 示例 Looper Handler MessageQueue 永动机停下 Native层 nativeInit() nativePollOnce() nati ...

  5. ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)

    本章来写一个插件,插件功能为通过NETLINK读取linux系统中的hotplug信息,比如usb.SD卡.磁盘等设备的插拔事件产生的信息,将读到的信息通过插件间通信的方式发出. 1. eventad ...

  6. Android学习笔记(三)Application类简介

    每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...

  7. 使用Event Bus模式解耦Android App组件间通信

    场景描述 当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难. 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容.这种场景常见的解决方式就是定 ...

  8. IPC--进程间通信二(命名管道)

    在前一篇文章中,我们看到了如何使用匿名管道来在进程之间传递数据,这个方式有一个缺陷,就是这些进程必须由一个共同的祖先进程启动,这在不相关的的进程之间交换数据带来了不便.而另一种通信方式--命名管道,可 ...

  9. Android中蓝牙的基本使用----BluetoothAdapter类简介

    原文:http://blog.csdn.net/qinjuning 天气逐渐热了,自己也越来越懒了,虽然看着了很多东西,解决了很多问题,有些收获却不想写着.主要有一下两方面原因: 第一.以前写的一些关 ...

最新文章

  1. 栈和队列存储结构总结
  2. 《智源社区周刊:预训练模型》第2期:Facebook用“预微调”改进预训练性能、再议GPT-3中的东方主义偏见...
  3. 一个IEEE论文LaTeX模板,可能较旧
  4. NPV Formula in Excel
  5. Git/码云上多人协作,创建分支,上传修改
  6. 记一次 Oracle无法连接 问题分析
  7. POJ1236 Network of Schools
  8. ajax参数中有加号,浅谈在js传递参数中含加号(+)的处理方式
  9. Net学习日记_ASP.Net_MVC_新语法笔记
  10. 【读书笔记】CSS代码规范
  11. WinForm数据绑定--BindingContext
  12. Theme Section HDU - 4763(些许暴力)
  13. Python卸载报错:No Python 3.8 installation was detected
  14. Java用itext工具根据模板生成PDF
  15. 前端开发对JSESSIONID的初步了解:JSESSIONID的产生以及简单说明
  16. 关于FAST迅捷FWR310无线路由器桥接移动光猫吉比特网关的问题
  17. uni-app ucharts无法显示
  18. ROC、PR曲线、AUC值
  19. windows10桌面_如何让Windows 10系统桌面变得更好看?
  20. 计算机桌面怎么添加便签,如何在电脑桌面上添加便签 这些知识你不一定知道...

热门文章

  1. Delphi 正则表达式起步
  2. 【转载】BROCADE交换机配置
  3. 热门事件和书籍中资料管理中国
  4. Spark实现协同过滤CF算法实践
  5. 好的数据分析平台有多重要
  6. Python高级专题 - 类型转换的魔术方法
  7. Labview连接mysql进行仿真
  8. 计算机word艺术字形状设置,4.11 Word 2016 自定义艺术字的形状效果,制作漂亮的艺术字...
  9. jquery修改服务器json,在没有JQuery的情况下将JSON发送到服务器并获取JSON作为回报...
  10. 本地广播LocalBroadcastManager简单使用