Android Intent过滤器

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 文件中设置。