IntentFilter的匹配规则

学习记录自《Android开发艺术探索》.

启动Activity的两种方式

1,显示启动 : 明确指出启动对象的组件信息,包名,类名

Intent intent = new Intent(this,LaunchModeActivityStudy.class);
startActivity(intent);

2,隐式启动:需要Intent能够匹配目标组件的IntentFilter中设置的过滤信息

IntentFilter

过滤信息有:action,category,data.

<activity
            android:name=".NormalActivityLife"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="com.ground.hao.a"/>
                <action android:name="com.ground.hao.b"/>
                <category android:name="com.ground.hao.c"/>
                <category android:name="com.ground.hao.d"/>
                <data android:mimeType="text/plain"/>
            </intent-filter>
        </activity>

1,需要同时匹配过滤列表中的action,category,data,否则匹配失败.

2,多个action,category,data,只需每类匹配一个即可匹配成功.

3,一个Activity可以有多个IntentFilter,一个Intent匹配任何一组即可.

匹配规则

1,action的匹配规则:Intent中的action与过滤中action字符串值完全相同.action区分大小写.

2,category的匹配规则:Intent中如果含义category,那么必须与过滤规则中的一个category相同.默认情况下系统在调用startActivity和startActivityForResult时会为Intent加上”android.intent.category.DEFAULT”.

3,data的匹配规则:与action类似,要求Intent中必须含有data数据.并且能够完全匹配过滤规则中的一个.
tips:如果你在 data 标签,既设置了 mimeType 又设置了 scheme 之内的,要为Intent指定完整的data,必须调用setDataAndType方法.

Intent intent1 = new Intent();//action
        intent1.setAction("com.ground.hao.a");
        intent1.addCategory("com.ground.hao.d");
    intent1.setDataAndType(Uri.parse("file://abc"),"text/plain");
        startActivity(intent1);

data的值

scheme, host, port, path, pathPrefix, pathPattern 是用来匹配 Intent 中的 Data Uri 的.

scheme:URI的模式:http,file,content.

Host:URI的主机名:www.csdn.com

Port:URI的端口号

path 用来匹配完整的路径

pathPrefix 用来匹配路径的开头部分

pathPattern 用表达式来匹配整个路径.

匹配符号:
“*” 用来匹配0次或更多

“.” 用来匹配任意字符

“.*” 就是用来匹配任意字符0次或更多

转义:
tips:由于正则表达式的规范,如果要表达真实的字符串 “*” 要写成 “\*” , “\”要写成”\\”.

发布了32 篇原创文章 · 获赞 6 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章