Android 隐式启动匹配原则

本文介绍了Android隐式启动Intent的匹配原则,包括Intent的Action、Category、Data与清单文件中IntentFilter的对应关系。重点强调了IntentFilter必须包含`android.intent.category.DEFAULT`,否则会导致匹配失败。同时指出,Intent的Data和Type需与IntentFilter中的完全一致才能匹配成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Intent中只能包含一个Action,可以包含多个Category;

2、清单文件中一个Activity可配置多个IntentFilter, 一个IntentFilter可包含多个

Action,多个Category,但是只能包含一个data;

3、Intent若含有Action,IntentFilter中包含多个Action,只要Intent中的Action与IntentFilter中的任一一个Action匹配,则算匹配成功;

4、Intent中若含有category,则这些category必须属于intentFilter中的category的子集,不管intentFilter中配置了多少category,Intent只需携带其子集数量的category即可匹配。

PS:IntentFilter中必须包含:<categoryandroid:name="android.intent.category.DEFAULT"/>因为使用隐式意图的Intent中会添加默认的Category,即上图中的category值,如IntentFilter中不添加上图的Category,则匹配不成功,会爆出android.content.ActivityNotFoundException: No Activity found to handle Intent { act=xxxxxxxx }异常,但是我其实不太明白,为什么入口Activity中不需要这个默认的Category,希望有知道的能提点一下。


5、若清单文件中一个Activity配置了多个IntentFilter,Intent只需与其中一个IntentFilter中的内容相匹配即可,但不可跨越多个IntentFilter去匹配。


6、Data包含Scheme,Host,Port,Path和Type五部分,Intent中Data和Type是分开设置的,且会按照设置顺序后设置Type或Data会覆盖前设置的Data或type,如果要让Intent中Data和Type共同存在需要使用setDataAndType(Uri data,String type);的API同时设置。Intent中的Data的5个组成部分必须是IntentFilter中5个部分的自己,才算匹配。


参考文章:http://blog.youkuaiyun.com/cnnumen/article/details/8464786

http://blog.youkuaiyun.com/mynameishuangshuai/article/details/51673273

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值