IntentFilter的匹配规则

IntentFilter中包含的过滤类型有action,category,data三种信息,必须要三种全部分别匹配,才算Intent匹配成功启动Activity。当然,三种信息的匹配规则并不是完全相同的。除此以外,一个Activity可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成启动对应的Activity。

action的匹配规则:

action是一个字符串,系统定义了一些action,同时我们也可以在应用中定义我们自己的action。匹配的规则就是:要求Intent中的action存在,而且必须和过滤规则中的其中一个action相同。action区分大小写。

category的匹配规则:

category是一个字符串,系统定义了一些category,同时我们也可以自己定义category。匹配规则是:Intent中测category必须是intent-filter中category的子集(包括系统在嗲用startActivity()或者startActivityForResult()时,会给intent默认添加的"android.intent.category.DEFAULT"这个category)。

data的匹配规则

匹配规则就是,intent中的data数据的范围必须是Intent-filter中指定data数据的范围的子集。除此之外,如果要为intent指定完整的data,必须要用setDataAndType方法,不能先后使用setData方法和setType方法,因为这两个方法彼此清除对方的值。
如果intent-filter没有指定URI,则URI的默认值是content和file。
下面两种intent-filter的作用是一样的。

<intent-filter>
    <data android:scheme="file" android:host="www.baidu.com"/>
</intent-filter>

<intent-filter>
    <data android:scheme"file"/>
    <data android:host="www.baidu.com/>
</intent-filter>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容