IntentFilter就是用于描述intent的各种属性, 比如action, category等

一些属性设置的例子:

<action android:name="com.example.project.SHOW_CURRENT" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="video/mpeg" android:scheme="http" . . . />

<data android:mimeType="image/*" />

<data android:scheme="http" android:type="video/*" />

 

 

 

关于IntentFilter的几点注意事项

(1).android.intent.action.MAIN 与 android.intent.category.LAUNCHER

android.intent.action.MAIN决定一个应用程序最先启动那个组件

android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里(说白了就是是否在桌面上显示一个图标)

 

这两个属性组合情况:

第一种情况:有MAIN,无LAUNCHER,程序列表中无图标

原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 

第二种情况:无MAIN,有LAUNCHER,程序列表中无图标

原因:android.intent.action.MAIN决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现

所以这两个属性一般成对出现。

 

如果一个应用中有两个组件intent-filter都添加了android.intent.action.MAIN和

android.intent.category.LAUNCHER这两个属性, 则这个应用将会显示两个图标, 写在前面的组件先运行。

 

 

(2).关于隐式intent

  每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败.

比如说一个activity组件要想被其他组件通过隐式intent调用, 则其在manifest.xml中的声明如下:

<activity android:name="com.gesture.QGestureListActivity">

     <intent-filter>  

           <action android:name="com.google.test" />

           <category android:name="android.intent.category.DEFAULT" />

 </intent-filter> 

</activity>

 

 

(3).关于intent-filter匹配优先级

首先查看Intent的过滤器(intent-filter),按照以下优先关系查找:action->data->category

 

 

(4).android.intent.category.LAUNCHER与android.intent.category.HOME的区别

android.intent.category.LAUNCHER:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里,就是android开机后的主程序列表。

 

android.intent.category.HOME:按住“HOME”键,该程序显示在HOME列表里。

------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。