当前位置: 移动技术网 > IT编程>移动开发>Android > android IntentFilter 匹配规则 (适用于面试的问题解答)

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

2018年04月02日  | 移动技术网IT编程  | 我要评论

兴宁天气预报,xs520,杭州拱墅区教育局

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,

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网