时间:2016年3月4日09:54:02
IntentFilter过滤信息:action、category、data
action:
1.Intent中的action必须能够和过滤条件中的action匹配,过滤条件中可以有多个action。
2.Intent中如果设置多个action则过滤条件中必须至少有同样数量的action。
3.如果Intent设置action但是并没有相应的过滤条件与之匹配则会报ActivityNotFoundException
异常。
4.Action区分大小写。
5.intent必须要书写设置action。(和category不同之处)。
category:
1.intent中可以不书写category,因为在使用startActivity或者startActivityForResult时会默认给category添加“android.intent.category.DEFAULT”这个category。
2.intent中如果出现了category,不管有几个对于没一个category来说过滤条件中都必须有已经定义的相同的category。
data:
1.data有两部分组成,mimeType和URI。mimeType指媒体类型,比如image/jpeg,video/*等,URI结构如下:
<scheme>://<host>:<port>/[<path>]|[<pathPrefix>]|[<pathPattern>]
Scheme:URI的模式,比如http、file、content等,如果URI没有指定scheme,那么URI无效。
Host:URI的主机名,比如www.baidu.com,如果host未指定,那么URI无效。
Port:URI的端口号,比如80,仅当Scheme和Host指定时才有效。
Path:表示完整的路径信息。
PathPattern:
表示完整的路径信息,但是可以使用通配符。
PathPrefix:路径的前缀信息。
2.如果仅指定了mimeType但是未指定URI,系统默认添加,默认值为content 或 file。
3.如果要指定完整地data,即同时包含mimeType和URI,必须使用setDataAndType()方法,例如:
intent.setDataAndType(Uri.parse("file://abc"),"image/*");
4.如果先调用setData再调用setType这两个方法会清空彼此的相关值。
可以通过PackageManager的resolveActivity(Intent intent , Int flag)对是否有匹配的Activity进行判断,如果为null即无匹配。
也可以说使用PackageManager的queryIntentActivities(Intent intent, int flag)进行匹配,返回值为List<ResolveInfo>。
【int flag 需要使用PackageManager.MATCH_DEFAULT_ONLY】
来自为知笔记(Wiz)