本节定义了Intent是什么和如何使用它。
一个Intent是Android从一个Activity(活动)传递信息到另外一个活动的方法。你可以认为一个Intent是一个活动间交换的信息。例 如,假定你有一个活动需要来打开一个网页浏览器并且在Android设备上显示一个页面。你的活动应当发送一个“在网页浏览器中打开某页的 Intent(意图)”,就像一个WEB_SEARCH_ACTION的Intent,一个Android Intent解答器。Intent解答器从语法上分析一个活动的列表并且选择最匹配你的Intent的一个。那就是,网页浏览器的活动。Intent解答 器然后传递你的网页到浏览器中并且启动网页浏览器活动。
Intents被分成两个主要目录
● Activity Action Intents(活动动作意图)Intents用来呼叫应用程序以外的活动。只有一个活动可以处理Intent。例如,对于网页浏览器,你需要打开网页浏览器活动来显示一个页面。
● Broadcast Intents (广播意图)Intents 被送出到多个活动来处理。一个被Android发出的广播意图的例子就是,当前电池的电量。任何活动处理这个意图并适时的反应。——例如,如果电池电量低到一定程度,取消一个活动。
表格 7-1 列出并且描述了通用的,可以使用活动动作意图。正如你注意到的一样,大多数情况下,从Intent名字可以看出这个Intent是做什么的。
Activity Action Intent | Message |
ADD_SHORTCUT_ACTION | 增加一个功能快捷菜单到Android的主屏 |
ALL_APPS_ACTION | 列出设备上可用的所有应用程序 |
ANSWER_ACTION | 接电话 |
BUG_REPORT_ACTION | 打开调试报告活动 |
CALL_ACTION | 呼叫一个提供的位置 |
DELETE_ACTION | 删除定义的数据 |
DIAL_ACTION | 打开拨号活动并且拨打一个定义好的号码 |
EDIT_ACTION | 对有权使用的数据提供编辑 |
EMERGENCY_DIAL_ACTION | 拨打一个紧急号码 |
FACTORY_TEST_ACTION | 回复工厂测试设定 |
GET_CONTENT_ACTION | 选择并返回定义的数据 |
INSERT_ACTION | 插入一个空的条目 |
MAIN_ACTION | 建立一个活动开始点 |
PICK_ACTION | 挑选一个条目并且返回一个选择 |
PICK_ACTIVITY_ACTION | 挑选一个特定的活动(返回一个类) |
RUN_ACTION | 执行特定的数据 |
SEARCH_ACTION | 在系统上启动搜索 |
SEND_ACTION | 发送数据给没有定义的接收者 |
SENDTO_ACTION | 发送数据到指定的接收者 |
SETTINGS_ACTION | 启动系统设定 |
SYNC_ACTION | 和外部的源同步手机 |
VIEW_ACTION (DEFAULT_ACTION) | 打开一个视图 |
WALLPAPER_SETTINGS_ACTION | 显示修改Android墙纸的设定 |
WEB_SEARCH_ACTION | 打开谷歌搜索,或者其它定义过的网页 |
注意
本章中的应用程序会用到列在表7-1中的Intents:
CALL_ACTION 和 DIAL_ACTION。这些Intents使你有进入手机拨号和呼叫的能力。
表格7-2列出并描述了通用的广播意图。当你需要为一个定义的Intent建立一个接受器时,请参考这个表。
Broadcast Intent | 信息 |
CALL_FORWARDING_STATE_CHANGED_ACTION | 电话呼叫转接状态已经改变 |
CAMERA_BUTTON_ACTION | 照相机的按钮被按下 |
CONFIGURATION_CHANGED_ACTION | 设备配置发生改变 |
DATA_ACTIVITY_STATE_CHANGED_ACTION | 设备的数据活动状态改变 |
DATA_CONNECTION_STATE_CHANGED_ACTION | 数据连接状态改变 |
DATE_CHANGED_ACTION | 手机系统数据改变 |
FOTA_CANCEL_ACTION | 取消未决的系统更新下载 |
FOTA_INSTALL_ACTION | 升级已经下载必须立即安装(由系统发送) |
FOTA_READY_ACTION | 升级已经下载可以延迟安装(由系统发送) |
FOTA_RESTART_ACTION | 重启一个系统升级下载 |
FOTA_UPDATE_ACTION | 开始系统升级下载 |
GTALK_SERVICES_CONNECTED_ACTION | 发送当GTALK已经成功建立 |
GTALK_SERVICES_DISCONNECTED_ACTION | 发送当GTALK已经断开 |
MEDIA_BAD_REMOVAL_ACTION | 发送当一个SD储存卡移开但是从系统中未成功移除 |
MEDIA_BUTTON_ACTION | 发送当媒体按钮按下 |
MEDIA_EJECT_ACTION | 发送当弹出动作为一个SD储存卡被初始化 |
MEDIA_MOUNTED_ACTION | 发送当一个SD储存卡在系统中成功安装 |
MEDIA_REMOVED_ACTION | 发送当检测到储存卡移出 |
MEDIA_SCANNER_FINISHED_ACTION | 发送当扫描器完成 |
MEDIA_SHARED_STARTED_ACTION | 发送当扫描器开始 |
MEDIA_UNMOUNTED_ACTION | 发送当SD卡被检测到但是没有被安装 |
MESSAGE_WAITING_STATE_CHANGED | 手机“信息等待”状态发生变化 |
NETWORK_TICKLE_RECEIVED_ACTION | 一个新网络设备通知被接受 |
PACKAGE_ADDED_ACTION | 当一个新的包装被安装在设备上发送 |
PACKAGE_CHANGE_ACTION | 发送当现存的包装发生改变 |
PACKAGE_INSTALL_ACTION | 一个包装可以被下载和安装 |
PACKAGE_REMOVED_ACTION | 一个包装已经被移除 |
PHONE_INTERFACE_ADDED_ACTION | 设备的手机界面已经被建立 |
PHONE_STATE_CHANGED_ACTION | 设备的手机状态已经改变 |
PROVIDER_CHANGED_ACTION | 设备从一个接收者处接收到通知 |
PROVISIONING_CHECK_ACTION | 从供给服务中检测最新的设定 |
SCREEN_OFF_ACTION | 屏幕被关闭(设备发送) |
SCREEN_ON_ACTION | 屏幕被打开(设备发送) |
SERVICE_STATE_CHANGED_ACTION | 服务状态被改变 |
SIGNAL_STRENGTH_CHANGED_ACTION | 信号强度改变 |
注意
一些广播意图经常被发送,如TIME_TICK_ACTION
和 SIGNAL_STRENGTH_CHANGED_ACTION。使用时请谨慎处理。你不应当试着去同时接受这样的广播。Intent只是大约三分之一。 其实Intent只是做了某些事情,而且它不能自己来做任何事。你需要Intent过滤器和Intent接受其来听,翻译Intents.一个 Intent接收器就像一个Activity的邮箱。Intent接收器被用来允许一个活动来接受定义的Intent。使用前一个网页浏览器的例子,网页 浏览器活动被设定来接受网页浏览器Intent。一个像这样的系统允许不相关的活动来忽略不能处理的Intent。它同时允许需要其它活动辅助的活动利用 这个活动,而不需要知道如何呼叫它。
有了Intents和Intents接收器,一个活动可以发送一个Intent并且另外一个可以接受。不过,需要一些东西来管理两个活动之间的信息类型。这就是为什么要用Intent过滤器了。
Intent过滤器被活动用来描述要接受的Intent类型。更重要的是,它们在Intent的内部概括了传递的数据类型。因此,在我们例子的方案中,我 们要网页浏览器来打开网页。Intent过滤器将会陈述数据使用 WEB_SEARCH_ACTION Intent应当是URL格式的。