IntentFilter相关

IntentFilter可用于Activity、Service、Receiver中。

IntentFilter中过滤信息由action、category、data其中一个或多个组成,他们的匹配规则各不相同。


action匹配规则

一个Intent只能有一个action并且隐式调用的时候必须有一个action,而一个IntentFilter可以有多个action,匹配的时候只要Intent的action和Intent中的其中一个action完全匹配则匹配成功。
action的匹配是区分大小写的。

category匹配规则

category和action不同,Intent可以没有category或拥有多个category,IntentFilter里也可由有多个category,匹配的时候如果Intent里存在category,那么这些category必须都 各自和IntentFilter里面的一个category相同,否则匹配不成功。
需要注意的时,尽管我们Intent里可以不设置category,但是当我们调用startActivity或startActivityForResult方法的时候会默认给我们传进去的Intent添加上"android.intent.category.DEFAULT"这个category,所以这时候Intent是默认有一条category的,因此如果我们要隐式调用Activity则必须要在这个Activity的IntentFilter添加上"android.intent.category.DEFAULT"这个category,否则无法匹配。

data匹配规则

data的结构如下
	<data android:scheme="string"
	      android:host="string"
	      android:port="string"
	      android:path="string"
	      android:pathPattern="string"
	      android:pathPrefix="string"
	      android:mimeType="string"/>
data由URI和mintType两部分组成,mimeType指媒体类型,比如image/jpeg、video/*等等
当IntentFilter里拥有data时,那么匹配的Intent必须拥有data,并且能完全匹配IntentFilter中的某一个data。
当IntentFilter没有设置URI的时候,该IntentFilter的scheme拥有默认值为content和file。
Intent只能拥有一个data,并且调用setData或setType方法时,这两个方法会彼此清除对方的值,要设置同时设置这两个值需要调用setDataAndType方法。

其他

现在Android版本不支持Service的直接隐式调用,我们需要先通过queryIntentServices方法获取匹配该Intent的Service的相关信息后采用显式调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值