Intent 对象可以被显式的指定目标组件。如果进行了这种指定,Android 会找到这个组件(依据manifest 文件中的声明)并激活它。
但如果Intent 没有进行显式的指定,Android 就必须为它找到对于intent 来说最合适的组件。
这个过程是通过比较Intent 对象和所有可能对象的intent 过滤器完成的。
组件的intent过滤器会告知Android 它所能处理的intent 类型。如同其它相对于组件很重要的信息一样,这些是在manifest 文件中进行声明的。
这里是上面实例的一个扩展,其中加入了针对activity 的两个intent 过滤器声明:<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
. . . >
<intent-filter . . . >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter . . . >
<action android:name="com.example.project.BOUNCE" />
<data android:type="image/jpeg" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
. . .
</application>
</manifest>
示例中的第一个过滤器──action “android.intent.action.MAIN”和类别“android.intent.category.LAUNCHER”的组合──是通常具有的。它标明了这个activity 将在应用程序加载器中显示,就是用户在设备上看到的可供加载的应用程序列表。
换句话说,这个activity 是应用程序的入口,是用户选择运行这个应用程序后所见到的第一个activity。
第二个过滤器声明了这个activity 能被赋予一种特定类型的数据。
组件可以拥有任意数量的intent 过滤器,每个都会声明一系列不同的能力。如果它没有包含任何过滤器,它将只能被显式声明了目标组件名称的intent 激活。
对于在代码中创建并注册的广播接收器来说,intent 过滤器将被直接以IntentFilter 对象实例化。
其它过滤器则在manifest 文件中设置。