一.什么是IntentFilter的匹配规则
当我们使用Intent来启动Activity时大多数情况是直接把要启动的Activity传递给Intent,这叫显式调用.
还有一种方法是隐式调用,通过给Acitivity加上一些过滤信息,当与启动时的过滤信息相匹配时就启动,有种对号入座的意思.
二.3种过滤信息
1.action
2.data
3.category
以上每种过滤信息都可以有多条,并且每种都要匹配。
三.action的匹配规则
action很简单,只要Intent中有一条action与之匹配即可,但要注意的是字符串值得完全相同。大小写敏感。
四.category的匹配规则
category的匹配规则,不同于action,如果你往Intent中添加一条category
那么Acitivity的IntentFilter中也必须有一条category与之匹配
需要注意的是,IntentFilter中必须加上一条
<category android:name="android.intent.category.DEFAULT"/>
Intent上可以不用加,系统默认加上
五.data的匹配规则
data的匹配规则相较复杂,它有个结构
[scheme]://[host]:[port]/[path or pathPrefix or pathPattern]
scheme:URI的模式
host:URI的主机名
port:URI的端口
[path | pathPrefix | pathPattern]三个属性只要其一匹配就好,代表路径信息
由于正则表达式的规范,想表示真实的字符串,"*"要写成"\\*","\"要写成"\\\\"
在Intent中添加data过滤信息要注意,setType方法和setData,他们会互相清除,对方所赋值的信息
可以使用setDataAndType方法解决。
六.其他
1.一个Activity可以有多个IntentFilter,只要其一匹配。
2.Server最好用显式调用。