设为首页 加入收藏

TOP

Android中的意图匹配--IntentFilter的作用
2014-11-24 07:17:41 来源: 作者: 【 】 浏览:0
Tags:Android 意图 匹配 --IntentFilter 作用

【1】Intent可以划分成显式意图和隐式意图。


显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。


隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。


【2】对于隐式意图,Android是怎样寻找到这个最合适的组件呢?


记的前面我们在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。


1.动作测试


元素中可以包括子元素,比如:







一条元素至少应该包含一个,否则任何Intent请求都不能和 该匹配。如果Intent请求的Action和中个某一 条匹配,那么该Intent就通过了这条的动作测试。如果Intent请求 或中没有说明具体的Action类型,那么会出现下面两种情况。


(1) 如果中没有包含任何Action类型,那么无论什么Intent请求都无法和这条匹配;


(2) 反之,如果Intent请求中没有设定Action类型,那么只要中包含有Action类型,这个 Intent请求就将顺利地通过的行为测试。


2.数据测试


数据在中的描述如下:






元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、 authority和path。其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指 定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。


数据测试同时比较意图对象和过滤器中指定的URI和数据类型。


规则如下:


a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。


b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。


c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。


d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 网络编程--URL获取数据/.. 下一篇Android中的显示跳转和隐式跳转

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)