Activity的Intent Filter

      Intent Filter 描述了一个组件愿意接收什么样的 Intent 对象,Android 将其抽象为 android.content.IntentFilter 类。在 Android 的 AndroidManifest.xml 配置文件中可以通过  节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity 可以响应什么类型的 Intent。

       当程序员使用 startActivity(intent) 来启动另外一个 Activity 时,如果直接指定 intent 了对象的 Component 属性,那么 Activity Manager 将试图启动其 Component 属性指定的 Activity。否则 Android 将通过 Intent 的其它属性从安装在系统中的所有 Activity 中查找与之最匹配的一个启动,如果没有找到合适的 Activity,应用程序会得到一个系统抛出的异常。这个匹配的过程如下:


Activity的Intent Filter_第1张图片


                    activity的Intent Filter的匹配过程图


Action的匹配

       Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其  节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:

  
  
  
……
  

 

如果我们在启动一个 Activity 时使用这样的 Intent 对象:

 Intent intent =new Intent(); 
 intent.setAction("com.zy.myaction"); 

 

      那么所有的 Action 列表中包含了“com.zy.myaction ”的 Activity 都将会匹配成功。

Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在android.content. Intent 中,以“ACTION_ ”开头。我们可以在 Android 提供的文档中找到它们的详细说明。


URL匹配

       一个 Intent 可以通过 URI 携带外部数据给目标组件。在  节点中,通过  节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:

  

 

      如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。

Category匹配

       节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。

来自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/

你可能感兴趣的:(Activity的Intent Filter)