Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。用个容易理解的概念,在访问网站时,需要提供网站的 URL,有时还需要通过URL参数,在Android世界里,Intent 的功能类似于URL,Android操作系统根据Intent来触发对于的Activitives,Services或是Broadcast Receivers。
下面来看看Android OS如何根据Intent来找到满足触发条件的Activity,Service或是Broadcast Receiver. 借用SQL 数据库的概念可以更好的理解。
SELECT AS Target
FROM
WHERE Intent Meet Target’s
Intent
Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。它主要包含下列信息:
Action: 列出需要执行的操作名称。或者在Broadcast Intents的情况下给出发生的事件名称。
| Constant | Target component | Action |
| ACTION_CALL | activity | 電話の開始. |
| ACTION_EDIT | activity | 電話の開始. |
| ACTION_MAIN | activity | |
| ACTION_SYNC | activity | 電話の開始. |
| ACTION_BATTERY_LOW | broadcast receiver | 电池电量低告警. |
| ACTION_HEADSET_PLUG | broadcast receiver | 耳机插入或拔出. |
| ACTION_SCREEN_ON | broadcast receiver | 屏幕打开或关闭. |
| ACTION_TIMEZONE_CHANGED | broadcast receiver | 时区变动. |
Data:定义不数据的URL以及数据的MIME类型。不同的Action能够处理的Data类型也不一样,比如 ACTION_CALL,它处理的数据格式为tel: URI,URI为电话号码。
Category: 定义了可以响应Intent的附加信息,一个Intent可以指定多个Category类型。和Action类似,Android 预定义了一些Category类型:
Extra: 附加Key-Value列表,可以向目标Activity传送附加参数。可以理解成函数调用时的参数。
Flags:指出Android启动目标Activity时的一些选项。
Intent Filters
Android中没个有效的Activity,Service,Broadcast Receiver都必须在AndroidManifest.xml有对应的定义。除非只使用明确调用发生来启动目标Activity,每个 Activity都需要定义一个intent-filter。下面是是明确指定目标Activity的示例代码:
Intent intent=new Intent(SplashActivity.this,GNavigator.class);
startActivity(intent);
而更一般的情况,Activity在AndroidManifest.xml具有如下定义:
<activity android:name=”.AndroidGISEngineTutorial”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<action android:name=”com.example.project.SHOW_CURRENT” />
<action android:name=”com.example.project.SHOW_RECENT” />
<action android:name=”com.example.project.SHOW_PENDING” />
.
<category android:name=”android.intent.category.DEFAULT” />
<category android:name=”android.intent.category.BROWSABLE” />
<data android:mimeType=”video/mpeg” android:scheme=”http” . . . />
<data android:mimeType=”audio/mpeg” android:scheme=”http” . . . />
.
</intent-filter>
</activity>
最常见的一个Intent Filter组合如下:
<intent-filter . . . >
<action android:name=”code android.intent.action.MAIN” />
<category android:name=”code android.intent.category.LAUNCHER” />
</intent-filter>
表示用户可以从Android设备的应用程序管理器启动该Activity,这个Activity为应用的主Activity,主Activity可以再使用Intent触发或是启动其它Activity。





