Intent Filter 描述了一个组件愿意接收什么样的 Intent 对象,Android 将其抽象为 android.content.IntentFilter 类。在 Android 的 AndroidManifest.xml 配置文件中可以通过 <intent-filter >
节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity 可以响应什么类型的 Intent。
当程序员使用 startActivity(intent) 来启动另外一个 Activity 时,如果直接指定 intent 了对象的
Component 属性,那么 Activity Manager 将试图启动其 Component 属性指定的 Activity。否则
Android 将通过 Intent 的其它属性从安装在系统中的所有 Activity 中查找与之最匹配的一个启动,如果没有找到合适的
Activity,应用程序会得到一个系统抛出的异常。这个匹配的过程如下:
图 4. Activity 种 Intent Filter 的匹配过程
Action 匹配
Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 <intent-filter >
节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<action android:name="com.zy.myaction" />
……
</intent-filter>
|
如果我们在启动一个 Activity 时使用这样的 Intent 对象:
Intent intent =new Intent();
intent.setAction("com.zy.myaction");
|
那么所有的 Action 列表中包含了“com.zy.myaction
”的 Activity 都将会匹配成功。
Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent
中,以“ACTION_
”开头。我们可以在 Android 提供的文档中找到它们的详细说明。
URI 数据匹配
一个 Intent 可以通过 URI 携带外部数据给目标组件。在 <intent-filter >
节点中,通过 <data/>
节点匹配外部数据。
mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:
<data android:mimeType="mimeType" android:scheme="scheme"
android:host="host" android:port="port" android:path="path"/>
|
如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。
Category 类别匹配
<intent-filter >
节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。
来自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/
分享到:
相关推荐
在Android应用开发中,Intent Filter是一个至关重要的概念,它用于定义一个组件(如Activity或BroadcastReceiver)能够响应的Intent类型。Intent Filter就像一个过滤器,筛选出应用可以处理的特定操作,使得系统能够...
当我们说到 "Activity_intent-filter" 时,我们实际上是在讨论如何通过设置 `intent-filter` 来使一个 `Activity` 对特定的 `Intent` 响应。 `Intent` 是Android中的一个消息传递对象,用于在组件之间传递请求或...
使用Intent filter来实现不同应用中Activity的相互跳转,点击A应用中的Activity,就跳转到B应用中的Activity,这种方式可以实现从一个应用的Activity 跳转到另一个应用的Activity,它们之间还可以传递数据。
在给定的标题“Data、Type属性与Intent-filter配置”中,我们关注的重点是如何通过设置`data`和`type`属性来过滤Intent,以便指定的应用组件(如Activity)能够响应特定的用户操作或系统事件。 `data`属性在Intent-...
【Intent 和 Intent Filter 理论介绍】 Intent 在 Android 开发中扮演着至关重要的角色,它是应用程序组件间通信的关键机制,使得组件之间可以实现松散耦合的交互。Intent 不仅仅用于启动另一个 Activity,还可以...
在Android应用开发中,Activity是Android系统中的一个核心组件,它是用户界面的载体,而Intent则是连接各个Activity的桥梁,用于传递数据和启动其他组件。Intent不仅用于启动Activity,还能启动Service、...
针对隐式Intent,需要在AndroidManifest.xml中为Activity定义Intent Filter,声明能处理的Action、Data、Category等,以便系统能够找到合适的Activity响应隐式Intent。 综上所述,Intent在Android开发中起着核心...
在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它被用来启动新的Activity或Service,也可以传递数据。本文将深入探讨如何在两个Activity之间通过Intent进行数据传递。 首先,理解Intent的基本概念。...
3. **Intent-filter**:Activity可以通过定义Intent-filter来响应特定类型的Intent请求,比如启动一个用于选择图片的Activity就需要声明ACTION_PICK这个Intent-filter。 4. **回退栈**:每个Activity都位于一个任务...
当使用隐式Intent时,目标Activity需要设置Intent Filter来表明它可以响应哪种类型的Intent。在AndroidManifest.xml中定义Intent Filter如下: ```xml <activity android:name=".TargetActivity"> <intent-...
在Android应用开发中,Activity和Intent是两个至关重要的概念,它们构成了Android应用程序的基本骨架。Activity作为用户界面的主要载体,Intent则是连接各个组件的桥梁,负责传递消息和启动操作。 Activity的生命...
"ex07_activity_intent"这个压缩包文件很可能包含了一系列关于Android中Intent使用的教程或示例代码,让我们来深入探讨Intent的概念、类型以及如何在实际应用中使用它。 1. **Intent的概念**: Intent是一个对象,...
Intent的Activity转向是Android系统中一个核心的概念,它允许应用程序从一个Activity跳转到另一个Activity,实现界面间的交互和数据传递。这里我们将深入探讨Intent的创建、类型以及如何在Activity之间进行切换。 1...
Intent Filter是组件(如Activity或BroadcastReceiver)声明它们可以处理的Intent类型。在AndroidManifest.xml中定义Intent Filter,包括Action、Data和Category。例如,如果你的Activity希望接收并处理HTTP链接,你...
Intent Filter是组件(如Activity或BroadcastReceiver)在清单文件中声明的一种机制,用于声明它们能响应什么样的隐式Intent。例如,如果一个Activity想要处理图片,它会在清单文件中添加如下过滤器: ```xml ...
5. Intent Filter:为了让其他应用能识别隐式Intent,目标Activity需要在清单文件(AndroidManifest.xml)中定义Intent Filter,声明它能处理的Action、Data、Category等。 ```xml <activity android:name="....
如果Intent请求的Action和<intent-filter>中的任意一个&action子标签匹配,那么该Intent就可以激活该Activity。 此外,<intent-filter>标签还可以包含category子标签,用于指定当前动作(Action)被执行的环境。...
4. 启动 Activity:使用隐式 Intent 启动 Activity,Android 系统将根据 Intent 的请求内容和 Intent Filter 比较,找到匹配的 Activity。 核心代码: 在 MainActivity 中: ```java Intent intent = new Intent()...