欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android IntentFilter 匹配规则 (适用于面试的问题解答)

程序员文章站 2022-03-16 17:29:09
1)android IntentFilter的匹配规则 启动activity分为两种,显示调用和隐式调用, 显示调用需要明确的指定被启动对象的组件信息,包括包名和类名, 隐式...

1)android IntentFilter的匹配规则

启动activity分为两种,显示调用和隐式调用,

显示调用需要明确的指定被启动对象的组件信息,包括包名和类名,

隐式调用则不需要明确指定组件信息,原则上一个Intent不应该即是显示又是隐式,

如果二者共存的话以显示调用为主,

 

隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果

不匹配则无法启动目标Activity,

intentFilter的过滤信息有action category data

eg:


    
        

        
        
        
    
这里我用友盟分享sdk中,在MainFest.xml中集成的一个activity为例:

(1)action的匹配规则:

action是一个字符串,action的匹配规则是Intent中的action必须能够和过滤规则中action

匹配,一个过滤规则中可以有多个action,只要intent中的action和过滤规则中任何一个匹配上,

就是匹配成功,(区分大小写)

 

(2)category的匹配规则:

category是一个字符串,category必须和过滤规则中的其中一个category相同,

intent中可以没有category,但是一点有就必须能个和过滤规则中的某个action相同,

如果没有系统会在调用startActivity或者startActivityforResult的时候默认为Intent加上android.

intent,category.DEFAULT

为了我们能够接收隐式调用,必须在IntentFilter中指定这个category,

 

(3)data的匹配规则

data由两部分组成,mimeType和URI,

mimeType指媒体类型。可以表示图片,文本等;

URI的结构:

scheme://host:port/path/pathprefix

Scheme: 表示URI的模式,(http file content)如果uri没有指定scheme,表示整个uri无效

host:URI的主机名 (www.baidu,com)如果host没有指定,整个uri无效

port:uri中的端口号。(80 8080 8088.。。)仅当uri中指定scheme和host参数时port才有意义

path pathPattern: 这两个参数表示路径信息,path表示完整路径信息,

如果要为Intent指定完整的data。必须要调用setDataAndType, 不能setData和setType,

这两个方法彼此清除对方的值;