Activity隐式启动时候IntentFilter的匹配规则
显式 Intent
即在构造Intent对象时就指定接收者,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的,如下:
Intent intent = new Intent(MainActivit.this, NewActivity.class);
startActivity(intent );
隐式 Intent
即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间,如下:
Intent intent = new Intent();
intent.setAction("com.wooyun.test");
startActivity(intent);
Intent Filter匹配规则
action 和 data 都是写的能和filter匹配一个即可
category 只要写的 都要能在filter中找到
Intent中category可以没有category,
因为Intent隐式启动的时候默认会追加一个android.intent.category.DEFAULT,
所以这也就要求intent-filiter中必须有android.intent.category.DEFAULT
至于 category android:name=”android.intent.category.LAUNCHE”
<intent-filter>
<action android:name="android.intent.action.MAIN" /> 决定应用程序最先启动的Activity
<category android:name="android.intent.category.LAUNCHER" />决定应用程序是否显示在程序列表里
</intent-filter>
这二者共同出现,标明该Activity是一个入口Activity,并且会出现在系统应用列表中,二者缺一不可。
intent-filter匹配优先级
首先查看Intent的过滤器(intent-filter),按照以下优先关系查找:action->data->category
参考:http://blog.csdn.net/eyishion/article/details/51113094
http://blog.csdn.net/mynameishuangshuai/article/details/51673273