隐式启动Activity时,并没有在Intent中指明Acitivity所在的类,因此,Android系统一定存在某种匹配机制,使Android系统能够根据Intent中的数据信息,找到需要启动的Activity。这种匹配机制是依靠Android系统中的Intent过滤器(Intent Filter)来实现的。
Intent过滤器是一种根据Intent中的动作(action)、类别(category)和数据(data)等内容。对适合接收该 Intent 的组件进行匹配和筛选的机制。Intent过滤器可以匹配数据类型、路径和协议,还可以确定多个匹配项顺序的优先级(priority)。应用程序的Activity、Service和 BroadcastReceiver 组件都可以注册Intent过滤器。这样,这些组件在特定的数据格式上则可以产生相应的动作。
为了使组件能够注册Intent过滤器,通常在AndroidManifest.xml 文件的各个组件下定义 < intent-filter >节点,然后再< intent-filter >节点中声明该组件所支持的动作、执行的环境和数据格式等信息。当然,也可以在程序代码中动态的为组件设置Intent过滤器。< intent-filter >节点支持< action >标签 、 < category >标签 和 < data >标签,分别用来定义Intent过滤器的动作、类型和数据。 < intent-filter >节点支持的标签和属性说明如下图:
< intent-filter > 节点属性
标签 | 属性 | 说明 |
---|---|---|
action | android: name | 指定组件所能响应的动作 |
category | android: category | 指定以何种方式去服务Intent请求的动作 |
data | Android: host android: mimetype android: path android: port android: scheme |
指定一个有效的主机名 指定组件能处理的数据类型 有效的URI路径名 主键的有效端口号 所需要的特定协议 |
< category >标签用来指定Intent过滤器的服务方式,每个Intent过滤器可以定义多个< category >标签,我们可以使用自定义