intent-filter
action
category
data
action
action的匹配规则比较简单,在AndroidManifest中添加的action中只要有一个与Intent的action相匹配即可匹配成功,匹配成功的话弹出选择框让用户选择,如果只有一个就会直接打开,这里要注意的地方是:
- 添加<category android:name = "android.intent.category.DEFAULT" />
- 如果有data标签则会过滤掉
- 全都匹配不到会崩溃,做好捕获异常
<activity android:name=".ActionOneActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.zjy.test1"/> </intent-filter> </activity>
findViewById(R.id.text3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.zjy.test1"); startActivity(intent); } });
这样就可以打开ActionOneActivity
category
category的匹配规则是全部匹配上才行,比如在Intent中添加了2个category,那么这2个必须在AndroidManifest设置中有的才能匹配上,如果有1个匹配不上就过滤了,且必须要有action,category相当于附带的,action没匹配上的情况下也不会匹配category
<activity android:name=".ActionThreeActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT"/> <category android:name="com.zjy.category1"/> <category android:name="com.zjy.category2"/> <category android:name="com.zjy.category3"/> <action android:name="com.zjy.test1"/> </intent-filter> </activity>
如果Intent要匹配上面这个activity的话action必须是com.zjy.test1,而category可以添加1个,2个或者3个,添加的话就必须是这3个中有的
findViewById(R.id.text3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.addCategory("com.zjy.category1"); //intent.addCategory("com.zjy.category2");添加这个也能匹配上 //intent.addCategory("com.zjy.category4");添加这个就不能匹配上 intent.setAction("com.zjy.test1"); startActivity(intent); } });
上方代码就比较清晰了,因为category1和category2都在AndroidManifest中,而category4不属于它,所以就会匹配不上,换成category3的话就可以
data
data的匹配规则就比较复杂一点,首要要理解URI,<scheme>://<host>:<port>/<path>
<activity android:name=".ActionThreeActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.zjy.test"/> <data android:scheme="aaa"/> </intent-filter> </activity>
如果Intent带的URI是:aaa://bbb:8888/ccc,即scheme=aaa,host=bbb,port=8888,path=ccc,那么上述的activity就可以匹配上,其实就相当于讲AndroidManifest中的套进去Intent中的,如果全部能套进去就能匹配上,上面就是将aaa套进Intent的scheme,能匹配上
<intent-filter> <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.zjy.test"/> <data android:scheme="aaa" android:host="bbb"/> </intent-filter>
host=bbb,也能套进去上面的URI,那么如果host是bab的话,这样就不能匹配上了,而且如果uri只有aaa://,那么上面这个host=bbb的也不能匹配上,所以当intent-filter中的能套上URI的就能匹配上
Intent-filter隐式打开activity
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.Intent的用法: (1)Action跳转 1、 使用Action跳转,当程序AndroidManifest...
- 一、知识点回顾:Activity (一)、如何实现Activity页面跳转? 示例代码: //第一种方式: Int...