Intent与IntentFilter
什么是IntentFilter?
->IntentFilter表示“意图过滤器”。
->IntentFiltery用于使用隐式意图时过滤Intent,即对匹配的Intent"放行",
对不匹配的Intent"阻止"。
配置IntentFilter
->通常在AndroidManifest.xml文件中,系统组件的节点下配置IntentFilter,例如:
IntentFilter,例如:
<activity
android:name="com.example.intent.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在一些应用场景中,可能使用程序代码配置IntentFilter,例如在广播接收者在应用中
IntentFilter的过滤准则
IntentFilter对Intent的以下属性有效的:
(1)Action
(2)Catetory
(3)Data
过滤Action
·每个IntentFilter可以添加多个Action。
·每个action节点中name属性的值可以由开发人员自行指定(一般是包名为前缀),在同一个Android设备中,action的值应该是
不冲突的,因此,该值通常以项目包名作为前缀。
过滤Action
·每个IntentFilter都应该指定至少一个Action,否则它将阻止所有Intent.
·如果Intent对象本身没有指定Action属性,将不参与匹配校验。
·如果Intent对象指定的Action属性与IntentFilter中任意一个Action匹配,则放行。
过滤Category
·每个IntentFilter可以添加多个Category
·与action节点相同,category节点中name属性的值可以由开发人员自行指定,且应该是不会
发生冲突的。
·开发人员可以不为Intent对象指定Category,也可以指定多个Category。
·Android系统必然会为每个Intent对象添加默认的Category,即:
.android.intent.category.DEFAULT
.在过滤规则中,Intent中的每个Category在IntentFilter中都能被找到,则放行,否则将阻止,即
放行的条件为:
IntentFilter中有默认的Category;
IntentFilter中的Category,对比Intent中的Category,只能多,不能少。
过滤Data
·每个IntentFilter可以添加多个Data
·在android:mimeType属性中指定MIME类型时,可以使用通配符,例如:text/* ,video/*等。
过滤Data
·每个Uri的完整格式为:
scheme://host:port:/path
·在IntentFilter中配置Data时,以上属性都是可选的,但它们并不独立
·关于Uri是否匹配:
·如果在IntentFilter中仅指定了scheme,则任意scheme的Uri均匹配,无视host,port.path部分;
·如果在IntentFilter中指定了scheme,host,则任意相同scheme和host的Uri均匹配,无视path部分
·如果在IntentFilter中指定了scheme,host,port,则任意相同scheme和,host,port的Uri均匹配,无视path部分
·如果在IntentFilter中指定了完整的Uri各部分,则要求验证的Uri也要完全匹配
·Data过滤规则:
·如果Intent没有指定Uri和MiME,仅当IntentFilter也没有指定Uri和MIME时放行;
·如果Intent中指定了Uri,但没有指定MIME,且根据Uri无法推断MIME,仅当IntentFilter
指定了相同的Uri且没有指定MIME时放行;
·如果Intent中没有指定Uri,但指定了MIME,仅当IntentFilter也没有指定Uri且指定了相同的
MIME时放行;
·如果Intent中同时指定了Uri和MIME,仅当IntentFilter中也指定了相同的Uri和MIME
时放行,或IntentFilter中没有指定MIME但根据Uri可以推断出MIME时放行
总结:
·IntentFilter可以指定Action,Category,Data来检验是否匹配,匹配的Intent将放行,否则将阻止。
·大致规则如下(通常设置的配置规则):
.关于Action:Intent对象中的Action(最多1个)在IntentFileter中可以被找到;
·关于Category:Intent对象中所有的Category在IntentFilter中都可以找到,
且Intent对象中必然有
android.intent.category,DEFAULT这个Category
Intent与IntentFilter
原文:http://blog.csdn.net/wei_chong_chong/article/details/50433646