码迷,mamicode.com
首页 > 其他好文 > 详细

Intent与IntentFilter

时间:2015-12-30 15:29:15      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!