Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选的机制。它可以匹配数据类型、路径和协议,还可以用来确定多个匹配项顺序的优先级(Priority)。
应用程序的Activity组件、Service组件和BroadcastReceiver都可以注册Intent过滤器,这些组件在特定的数据格式上就可以产生相应的动作。
注册Intent过滤器的方法如下:
在AndroidManifest.xml文件的各个组件的节点下定义<intent-filter>节点,然后在<intent-filter>节点中声明该组件所支持的动作、执行的环境和数据格式等信息。
<intent-filter>节点支持<action>标签、<category>标签和<data>标签,其中:<action>标签定义Intent过滤器的“类别”;<category>标签定义Intent过滤器的“动作”;<data>标签定义Intent过滤器的“数据”。
<intent-filter>节点支持的标签和属性如表6-4所示。
表6-4 <intent-filter>节点支持的标签和属性
标 签 |
属 性 |
说 明 |
<action> |
Android:name |
指定组件所能响应的动作,用字符串表示,通常使用Java类名和包的完全限定名构成 |
<category> |
Android:category |
指定以何种方式去服务Intent请求的动作 |
<data> |
Android:host |
指定一个有效的主机名 |
Android:mimetype |
指定组件能处理的数据类型 |
Android:path |
有效的Uri路径名 |
Android:port |
主机的有效端口号 |
Android:scheme |
所需要的特定的协议 |
<category>标签用来指定Intent过滤器的服务方式,每个Intent过滤器可以定义多个<category>标签,程序开发人员可使用自定义的类别,或使用Android系统提供的类别。其中,Android系统提供的类别如表6-5所示。
表6-5 Android系统提供的类别
值 |
说 明 |
ALTERNATIVE |
Intent数据默认动作的一个可替换的执行方法 |
SELECTED_ALTERNATIVE |
和ALTERNATIVE类似,但替换的执行方法不是指定的,而是被解析出来的 |
BROWSABLE |
声明Activity可以由浏览器启动 |
续表
值 |
说 明 |
DEFAULT |
为Intent过滤器中定义的数据提供默认动作 |
HOME |
设备启动后显示的第一个Activity |
LAUNCHER |
在应用程序启动时首先被显示 |
AndroidManifest.xml文件中的每个组件的<intent-filter>都被解析成一个Intent过滤器对象。当应用程序安装到Android系统时,所有的组件和Intent过滤器都会注册到Android系统中。这样,Android系统便知道了如何将任意一个Intent请求通过Intent过滤器映射到相应的组件上。