Activity隐式启动IntentFilter

时间: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】


        




posted @ 2016-03-04 11:05  五月的雨  阅读(946)  评论(0编辑  收藏  举报