Android简明开发教程七:Intents和Intent Filters

Android应用中的三个核心组件:Activities,Services和broadcast receivers都是通过称为“Intent”的消息来激活的。 Android应用一个特点是“低耦合”,各个Activities,Services和broadcast receivers相当独立,可以看成是一个个“迷你应 用”,而Intent是这些“迷你应用”的粘合剂,Intent不但可以用于同一个Application之间Activities,Services和broadcast receivers的交互,也可以用于不同Application之间Activities,Services和broadcast receivers的交互。

Intent本身为一 个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。用个容易理解的概念,在访问网站时,我们需要提 供网站的URL,有时还需要通过URL参数,在Android世界里,Intent 的功能类似于URL,Android操作系统根据Intent来触发对于 的Activitives,Services或是Broadcast Receivers。

Android应用中的三个核心组件:Activities,Services和broadcast receivers都是通过Intent来触发的,当它们触发的机制各不相同,而且不会有重叠,也就是说发给Activity的Intent不会激活 Service或是broadcast receivers,发给broadcast receivers的Intent也不会触发Activity和Service。

Activity 通过方法 Context.startActivity() 和 Activity.startActivityForResult()来调用。以函数调用为参考 startActivity() 相当于调用无返回值的函数,startActivityForResult()调用的Activity有返回值,可以通过 Activity.setResult()来返回结果。

Context.startService()用来初始化Service,Context.bindService()可以用来建立与目标Service之间的连接,如果 Service没有运行,则会启动该Service。

Broadcast Receiver是通过  Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和 Context.sendStickyBroadcast()来触发的。大部分的Broadcast消息来自于Android操作系统,如电池状态,来电,短消息等。

和URL不太一样的是,URL和网站一般是一一对应的,而一个Intent可以用来触发某个指定的Activity,Service或是 Broadcast Receiver,或是触发多个满足Intent条件的Activities,Services或是Broadcast Receivers。

下面来看看 Android OS如何根据Intent来找到满足触发条件的Activity,Service或是Broadcast Receiver.  借用SQL 数据库的概念 可以更好的理解。

SELECT (Activitives|Services|Broadcast Receivers) AS Target

FROM  (List in AndroidManifest.xml)

WHERE Intent Meet Target’s (Intent Filter)

意思就是从AndroidManifest.xml中定义的 Activities,Services和Broadcast Receiver列表中查找符合Intent 条件的Activities,Services,或是Broadcast Receivers 。所有能活被激活的Activity,Service和Broadcast Receiver都必须在AndroidManifest.xml有定义,否则Android OS无法查询 到该目标,相当于数据库中无记录,即使你在代码中定义了该Activity,Service或Broadcast Receiver。

Intent

Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。它主要包含下列 信息:

Component name:可以处理该Intent的组件名称,组件名称指定义Activity,Service的包和类的全名称。比如类名为 com.pstreets.gisengine.AndroidGISEngineTutorial ,包名为com.pstreets.gisengine。 组件名称为可选项,如果指定了,意 味明确指定用来响应该Intent的Activity,Service。

Action: 列出需要执行的操作名称。或者在Broadcast Intents的情况 下给出发生的事件名称。

Constant Target component Action
ACTION_CALL activity 开始打电话.
ACTION_EDIT activity 显示编辑对话 框.
ACTION_MAIN activity 作为一个任务(应用)的起始Activity,对于可以从Android应用列表的应用来说,都需要在 AndroidManifest.xml 中设置ACTION_MAIN的Intent-Filter属性。
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类型:

Constant Meaning
CATEGORY_BROWSABLE 表示目标Activity可以 使用浏览器安全显示指定连接,比如说一个图片或是Email消息.
CATEGORY_GADGET 表示该Activity可以当作一个Gadget嵌入到其它可以放置Gadget的Activity中。
CATEGORY_HOME 表示还Activity是Home Screen,可以设置这个属性来替换Android自带的 Home Screen。
CATEGORY_LAUNCHER 该Activity可以显示在Android程 序管理器中。一般应用的主Activity都会在AndroidManifest.xml 定义该属性。
时间: 2024-10-18 17:01:24

Android简明开发教程七:Intents和Intent Filters的相关文章

Android简明开发教程九:创建应用程序框架

Android简明开发教程八说明了程序需要实现的功能,就可以创建Android项目了.请参见Android简明开发教程三:第一个应 用Hello World ,创建一个新项目AndroidGraphics2DTutorial.今天先介绍创建的程序的框架.然后再项目添加如下类定义: 添加第三方库文件 AndroidGraphics2DTutorial调用了引路蜂二维图形库,因此需要在项目中添加第三方库引用(libgisengine.jar),打开 Android属性窗口,添加External JA

Android简明开发教程二十四:总结及示例代码下载

Android 简明开发教程使用了引路蜂二维图形库作为例子,引路蜂二维图形库是引路蜂地图开发包 (http://www.imobilebbs.com/wordpress/?page_id=6)一部分,引路蜂地图开发包提供了对几乎所有软件平台(桌面和移动平台 )的支持,采用统一的接口使用包括Google 地图,Bing地图,MapABC地图在内多达二十多种地图类型,并在同一开发包中支持离 线地图,矢量地图显示. 引路蜂地图开发包Android平台示例可以参见:http://www.imobileb

Android简明开发教程二十一:访问Internet 绘制在线地图

在例子Android简明开发教程十七:Dialog 显示图像 中我们留了一个例子DrawMap()没有实现,这个例子显示在线地图,目前大部分地图服务器都是将地图以图片存储以提高响应速 度. 一般大小为256X256个像素.具体可以参见离线地图下载方法解析. 比如: URL http://www.mapdigit.com/guidebeemap/maptile.php?type=MICROSOFTMAP&x=7&y=4&z=14 显示: 下面的例子访问Internet下载地图图片,并

Android简明开发教程十二:引路蜂二维图形库简介及颜色示例

AndroidGraphics2DTutorial定义了应用的主Activity,下面就可以开始写每个具体的二维绘图示例.不同的例子将尽量采用 不同的UI控件:Menu,Content Menu,Dialog,Custom Dialog,Button等等.例子采用了引路蜂二维图形库,引路蜂二维图形 库Graphics 2D API实现了移动平台(Java ME,Blackberry,iPhone,Android,Windows Phone)上图形引擎,它能够以一种统一的方 式处理各种基本图形(S

Android简明开发教程二:安装开发环境

前面Android简明开发教程一:概述简要的介绍了Android平台,本篇说明如何安装搭建Android开发环境. Android开发支 持Windows (Windows XP (32-bit), Vista (32- , 64-bit),  Windows 7 (32- , 64-bit)),Mac OS (>10.5.8), Linux( Ubuntu Linux, Lucid Lynx etc). 开发Java应用最常用的是NetBean和Eclispe.但Google推荐使用的是Ecl

Android简明开发教程十三:Option Menu画笔示例

引路蜂二维图形画笔(Pen)示例含有四个示例,Lines ,Dashes ,LineJoin 和LineCap.打算采用Option Menu(主菜单) 的方式来选择不同示例. 首先要对GuidebeeGraphics2DView,和Graphics2DActivity做些改动,从这个示例开始,GuidebeeGraphics2DView需要动态 绘制不同图形(可以通过菜单,或是Thread).在GuidebeeGraphics2DView增加下面两个方法: final Runnable upd

Android简明开发教程十:数据绑定Data Binding

前面提到AndroidGraphics2DTutorial说过它是ListActivity派生出来的.ListActivity中显示的是ListView,ListView和 Gallery ,Spinner有一个共同点:它们都是AdapterView的子类.AdapterView的显示可以通过数据绑定来实现,数据源可以是 数组或是数据库记录,数据源和AdapterView是通过Adapter作为桥梁.通过Adapter,AdatperView可以显示数据源或处理用户选 取时间,如:选择列表中某项

Android简明开发教程四:Android应用基本概念

Android平台的一个显著的特点是"低耦合".Activity是Android应用的一个最基本的用户UI模块.如果采用Windows Form 应用作为参照,Activity相当于Windows中的WinForm.和Windows 应用不同的是,运行一个Activity或是Activity之间的交互是 通过消息来实现的.也就是说如果想在起动一个Activity或是在一个Activity中启动另一个Activity,是通过发送Intent消息来 触发,而不像Windows WinFor

Android简明开发教程二十二:使用资源Resources

在前面的例子中,我们忽略了一个重要的原则,在代码和Layout中,直接使用了字符串常量,比如: <Button android:text="Pattern" android:id="@+id/btnPattern" android:layout_width="wrap_content" android:textColor="@color/black" android:checked="true" an