一、匹配规则
1.action规则:
IntentFilter中可有1~N个action属性;必有一个。
Intent中有1个action属性,且Intent中action需与IntentFilter中任意一个匹配。
IntentFilterAction(1~N个) >= IntentAction(1个)
2.data规则
data由Type和URL两部分组成,全相同才匹配。
IntentFilter中可有0~N个data属性;可没有。
Intent中有0~1个data属性,如IntentFilter有data则Intent中必有,且Intent中data需与IntentFilter中任意一个匹配。
IntentFilterData(0~N个) >= IntentData(0~1个) 且IntentFilter有data则Intent中必有
3.category规则
IntentFilter中可有1~N个category属性;必有一个"android.intent.category.DEFAULT"。
Intent中有0~N个category属性,默认的category无需添加(自带),且Intent中category需全为IntentFilter中有的。
IntentFilterCategory(1~N个) >= IntentCategory(0~N个)
二、隐式启动
如果想使外部程序可隐式启动该Activity需将exported属性设为true。
<activity
android:name=".MainActivity"
android:exported="true">
</activity>
三、Intent中添加属性
1.添加action,data,category属性
Intent intent=new Intent();
//活动
intent.setAction(" ~ ");
//数据及类型
intent.setDataAndType( url , "type" );
//分类;默认category无需添加
intent.addCategory(" ~ ");
//跳转
startActivity( intent );
2.获取Intent中data属性的信息
Intent intent=getIntent();
URL url=intent.getData();
四、IntentFilter中添加属性
<activity
android:name=".MainActivity"
android:exported="true">
<!-- 设置android:exported="true"使其他程序可以隐式启动该Activity !-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<data android:mimeType=" " android:scheme=" "/>
<category android:name="android.intent.category.DEFAULT" />
<!-- 必需添加默认的category属性"android.intent.category.LAUNCHER" !-->
</intent-filter>
</activity>