文档介绍:引言
大部分移动设备平台上的应用程序都运行在他们自己的沙盒中。他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互。我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义!Android应用程序也是一个沙盒,但是他们能够使用Intent、Broadcast Receivers、Adapters、Content Providers、去突破他们的边界互相交流。有交流还会和谐,由此可见这些交流手段有多重要。
上篇文章中我们在SMS接收程序和使用Intent发送SMS程序中用到了Intent,并做了简单的回顾和总结:android应用程序的三大组件——Activities、Services、Broadcast Receiver,通过消息触发,这个消息就称作意图(Intent)。然后以活动为例简单介绍了Intent了并说明Intent机制的好处。既然在SMS程序中用到了Intent,这里我就借机顺着这条线,彻底详细地介绍一下Intent。分两篇文章介绍:
Android开发之旅: Intents和Intent Filters(理论部分)
Android开发之旅: Intents和Intent Filters(实例部分)
本文的主要内容如下:
1、概述
2、Intent对象
、组件名字
、动作
、数据
、种类
、附加信息
、标志
3、Intent解析
、Intent过滤器
、动作检
、种类检测
、数据检测
、通用情况
、使用intent匹配
1、概述
一个应用程序的三个核心组件——activities、services、broadcast receivers,都是通过叫做intents的消息激活。Intent消息是一种同一或不同应用程序中的组件之间延迟运行时绑定的机制。intent本身(是一个Intent对象),是一个被动的数据结构保存一个将要执行的操作的抽象描述,或在广播的情况下,通常是某事已经发生且正在宣告。对于这三种组件,有独立的传送intent的机制:
Activity:()()去启动一个活动或使一个已存在的活动去做新的事情。
Service:()去初始化一个service或传递一个新的指令给正在运行的service。类似的,()去建立调用组件和目标服务之间的连接。
Broadcast Receiver:一个intent对象传递给任何广播方法((),(),()),都将传递到所有感兴趣的广播接收者。
在每种情况下,Android系统查找合适的activity、service、broadcast receivers来响应意图,如果有必要的话,初始化他们。这些消息系统之间没有重叠,即广播意图仅会传递给广播接收者,而不会传递活动或服务,反之亦然。
下面首先描述intent对象,然后介绍Android将intent映射到相应组件的规则——如何解决哪个组件应该接收intent消息。对于没有指定目标组件名字的intent,这个处理过程包括按照intent filters匹配每个潜在的目标对象。
2、Intent对象
一个Intent对象是一个捆信息,包含对intent有兴趣的组件的信息(如要执行的动作和要作用的数据)、Android系统有兴趣的信息(如处理intent组件的分类信息和如何启动目标活动的指令)。下面列出它的主要信息:
、组件名字
处理intent的组件的名字。ponentName对象——是目标组件的完全限定类名(.")和应用程序所在的包在清单文件中的名字(.")的组合。其中组件名字中的包部分不必一定和清单文件中的包名一样。
组件名字是可选的,如果设置了,intent对象传递到指定类的实例;如果没有设置,Android使用intent中的其它信息来定位合适的目标组件(见下面的Intent解析)。ponent(),setClass()或setClassName()设置,ponent()读取。
、动作
一个字符串命名的动作将被执行,或在广播int