1.显示Intent和隐式Intent

Intent分为显示和隐式两种。对于显示Intent,因为指定了“目的地”,所以无视Intent-filter,直达“目的地”。而隐式Intent没有明确的指定“目的地”,所以要根据Intent携带的数据来确定该Intent要被发往哪里,同时“目的地”也要有一个“门牌”来表示该“目的地”可以接受哪种类型的Intent,这种“门牌”机制即Intent-filter。两种情况大致如下:

intent1

2.Intent的主要属性

Intent大致包含Component,Action,Category,Data,Type,Extra,Flag这7种主要的属性,最常见到的是前3种。

Component:Component属性即上面所说的“目的地”,若指定了该属性则为显示Intent,无视Intent-filter。

Action:对于任何一个Intent,至多只能有一个Action(可以自定义),它是Intent的主属性。注意,可以不设置Action属性,这样相当于让Intent-filter忽略该属性而直接检查其他属性是否匹配。

Category:一个Intent最多只能有一个Action,但是有的时候我们希望能更加细化这个Intent,这时候就需要使用Category属性了,该属性是Action的扩充,将Intent描述的更加详细。

3.Intent-filter的匹配规则

既然Intent有描述自己的属性,那“目的地”为了接收到某一Intent则需要在“门牌”上写上自己希望接收的Intent的“长相”,所以在Intent-filter中也有Action,Category等相应的属性,一个Intent-filter的长相大致如下:

那匹配的具体规则是什么呢?其实很简单,只要Intent中指定的属性是 Intent-filter中列举的属性的子集即可,要注意的一点是:隐式Intent默认会被赋予android.intent.category.DEFAULT的Category属性,所以要想接收隐式Intent,得在Intent-filter中加上这个属性。

 

观看更多有关 的文章?

*

+
跳转到评论