📜  android 启动器意图过滤器 (1)

📅  最后修改于: 2023-12-03 14:59:16.232000             🧑  作者: Mango

Android 启动器意图过滤器

启动器意图过滤器(Intent Filters)是 Android 中用来定义一个组件能应对哪些意图(Intent)的一种机制。启动器意图过滤器通常用于指定活动(Activity)的入口点,也可以用于指定广播接收器(Broadcast Receiver)和服务(Service)的入口点。

使用场景
  • 启动特定活动:通过在活动的清单文件中定义启动器意图过滤器,可以使得该活动能够响应特定类型的意图。比如,一个相机应用可以定义一个启动器意图过滤器,使得只有发送的意图类型为“拍照”的时候,才能够启动该相机活动。
  • 广播接收器过滤:使用启动器意图过滤器,可以指定广播接收器只接收特定的广播意图。比如,可以指定一个广播接收器只能够接收系统的开机广播 intent。
  • 服务的入口点:通过在服务的清单文件中定义启动器意图过滤器,可以使得该服务能够根据不同的意图启动。比如,一个音乐播放器服务可以定义一个启动器意图过滤器,使得可以通过不同的意图来控制音乐的播放、暂停等。
启动器意图过滤器的结构

在 Android 的清单文件(AndroidManifest.xml)中,可以使用 <activity>、<receiver>、<service> 元素来定义启动器意图过滤器。

以下是一个示例的启动器意图过滤器结构:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>
</activity>

上述示例将活动 MainActivity 配置为能够处理 android.intent.action.VIEW 类型的意图,并且支持处理 httphttps 的 URI。

  • <action> 元素:指定意图的动作类型,如 android.intent.action.VIEW 表示查看操作。一个组件可以支持多个动作类型。
  • <category> 元素:指定意图的类别,如 android.intent.category.DEFAULT 表示普通意图,android.intent.category.BROWSABLE 表示可通过浏览器打开的意图。一个组件可以支持多个类别。
  • <data> 元素:指定数据相关的匹配条件,如 URI 或 MIME 类型。一个组件可以支持多个 <data> 元素。
意图过滤器的匹配规则

启动器意图过滤器的匹配是通过 Intent 对象中的动作(Action)、类别(Category)和数据(Data)来进行的。

为了匹配一个意图,系统会依次检查所有已安装应用程序的清单文件中的启动器意图过滤器,找到与意图相匹配的过滤器。匹配规则如下:

  • 动作匹配:如果发送的意图的动作和启动器意图过滤器中的动作相匹配,则继续比较类别和数据。
  • 类别匹配:如果启动器意图过滤器中的所有类别都出现在发送的意图中,则继续比较数据。
  • 数据匹配:如果启动器意图过滤器中的至少一个 <data> 元素与发送的意图的数据相匹配,则匹配成功。
参考文档