Intent( 意图) 简 介

  • Android 意图(Intent)是一个要执行操作的抽象描述,是 Android 四大组件间之间的枢纽,通信的桥梁,比如可以通过:
  • startActivity(Intent)、startActivityForResult(Intent):启动一个Activity
  • startService(Intent)、bindService(Intent):启动一个Service
  • sendBroadcast:发送广播到指定 BroadcastReceiver
  • 假如现在需要在 Android 设备上通过浏览器打开一个 URL 地址,则可以发送 ACTION_WEB_SEARCH 意图到 Android 意图处理器来在浏览器中打开给定的 URL 。意图处理器通过解析一系列活动,并选择最适合本意图的活动(本例中为 Web 浏览器),意图处理器将传递设置好的网页地址到 Web 浏览器,并打开 Web 浏览器活动,代码如下所示:
String q = "https://www.baidu.com";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);
  • 上面几行代码只是一个简单的例子,后面会逐一说明其中的作用,Intent(意图)是 Android 开发至关重要的一个点,必须重点掌握。
  • public class Intent implements Parcelable, Cloneable{ 位于 android.content 包,常用构造器如下:

public Intent()
public Intent(String action) 
public Intent(String action, Uri uri)

Intent 常用属性

  • Intent(意图)对象是一组信息,包括如下的组件,具体取决于通信方式。

Action( 动作)

  • Action 是意图对象中必须的部分,被表现为一个字符串。
  • 意图对象中的动作可以通过 setAction() 方法来设置,也可以在创建 Intent 的同时进行设置,通过 getAction() 方法来读取。
  • 动作将很大程度上决定意图的其它部分如何被组织,Intent 类定义了一系列动作常量对应不同的意图。

                                                                   常见的 Activity Intent  Action 常量

常量名称 常量值 意义/描述
ACTION_MAIN android.intent.action.MAIN 应用程序入口
ACTION_VIEW android.intent.action.VIEW 显示数据给用户
ACTION_ATTACH_DATA android.intent.action.ATTACH_DATA 指明附加信息给其他地方的一些数据
ACTION_EDIT android.intent.action.EDIT 显示可编辑的数据
ACTION_PICK android.intent.action.PICK 选择数据
ACTION_CHOOSER android.intent.action.CHOOSER 显示一个Activity选择器
ACTION_GET_CONTENT android.intent.action.GET_CONTENT 获得内容
ACTION_DIAL android.intent.action.GET_CONTENT 显示打电话面板
ACITON_CALL android.intent.action.DIAL 直接打电话
ACTION_SEND android.intent.action.SEND 直接发短信
ACTION_SENDTO android.intent.action.SENDTO 选择发短信
ACTION_ANSWER android.intent.action.ANSWER 应答电话
ACTION_INSERT android.intent.action.INSERT 插入数据
ACTION_DELETE android.intent.action.DELETE 删除数据
ACTION_RUN android.intent.action.RUN 运行数据
ACTION_SYNC android.intent.action.SYNC 同步数据
ACTION_PICK_ACTIVITY android.intent.action.PICK_ACTIVITY 选择Activity
ACTION_WEB_SEARCH android.intent.action.WEB_SEARCH Web搜索
ACTION_FACTORY_TEST android.intent.action.FACTORY_TEST 工厂测试入口点
ACTION_SEARCH android.intent.action.SEARCH 搜索

                                                          常见的 BroadcastIntent Action 常量

常量名称 意义/描述
ACTION_TIME_TICK 系统时间每过一分钟发出的广播
ACTION_TIME_CHANGED 系统时间通过设置发生了变化
ACTION_TIMEZONE_CHANGED 时区改变
ACTION_BOOT_COMPLETED 系统启动完毕
ACTION_PACKAGE_ADDED 新的应用程序apk包安装完毕
ACTION_PACKAGE_CHANGED 现有应用程序apk包改变
ACTION_PACKAGE_REMOVED 现有应用程序apk包被删除
ACTION_UID_REMOVED 用户id被删除

Data( 数据)

  • 添加Data(数据)到 Intent(意图)过滤器,Data 类型可以是元数据类型、或者一条 URI、或者同时包括元数据类型与 URI 。
  • URI 由不同部分的属性来指定,属性是可选的,相互独立。赋值使用 setXxx 方法,对应着取值的 getXxx 方法。

Intent setData(@Nullable Uri data)  ——以 URI 来指定数据
Intent setType(@Nullable String type)  ——以元类型指定数据
Intent setDataAndType(@Nullable Uri data, @Nullable String type) ——同时指定 URI 和元类型

Uri getData()  ——获取 UIR 数据
String getType()  ——获取元数据

  • 如下所示为调用系统内置的短信应用发送信息:
/**为 10086 发送短信* 也可以使用 Intent(String action, Uri uri) 构造器同时设置Action(动作)与Data(数据)* */
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(uri);
/**sms_body:设置短信的内容*/
intent.putExtra("sms_body", "Hello");
startActivity(intent);
  • 由此可见,不同的 Action 对应着不同的 Data,下表为常见的组合:

      Action 与 Data 属性匹配

动作/数据组合 描述/说明
ACTION_VIEW content://contacts/people/1 显示ID为1的用户的信息。
ACTION_DIAL content://contacts/people/1 显示电话拨号器,并填充用户1的数据。
ACTION_VIEW tel:114 显示电话拨号器,并填充给定的号码。
ACTION_DIAL tel:114 显示电话拨号器,并填充给定的号码。
ACTION_EDIT content://contacts/people/1 编辑ID为1的用户信息
ACTION_VIEW content://contacts/people/ 显示用户列表,以便查看
ACTION_VIEW http://www.google.com 在浏览器中浏览该网站
ACTION_VIEW file://sdcard/mymusic.mp3 播放MP3
ACTION_VIEW geo:39.2456,116.3523 显示地图

category( 类别)

  • 类别是意图中可选的部分,包含该类型组件需要处理的意图的附加信息,和 Action 一样也是一个字符串。
  • addCategory() 方法为意图对象添加类别,removeCategory() 方法删除之前添加的类别,getCategories() 获取所有被设置到意图对象中的类别。
  • 如下所示是一段根据应用的包名来调用第三方 APP 打开的例子,如 微信的包名:com.tencent.mm、微博的包名:com.sina.weibo、网易有道的包名:com.youdao.dict :
String packageName = "com.youdao.dict";
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

 常见 Category 常量

常量名称 意义/描述
CATEGORY_BROWSABLE 目标Activity能通过在网页浏览器中点击链接而激活(比如,点击浏览器中的图片链接)
CATEGORY_GADGET 表示目标Activity可以被内嵌到其他Activity当中
CATEGORY_HOME 目标Activity是HOME Activity,即手机开机启动后显示的Activity,或按下HOME键后显示的Activity
CATEGORY_LAUNCHER 表示目标Activity是应用程序中最优先被执行的Activity
CATEGORY_PREFERENCE 表示目标Activity是一个偏爱设置的Activity

extra( 附加数据)

  • 以键值对描述的附加信息,传递给需要处理意图的组件。
  • 通过 putExtras() 方法设值,getExtras() 方法取值。
  • 如下所示为一段发送邮件的代码:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);

                                                                                  常见 Extra 常量

常量名称 意义/描述
EXTRA_BCC 装有邮件密送地址的字符串数组
EXTRA_CC 装有邮件抄送地址的字符串数组
EXTRA_EMAIL 装有邮件发送地址的字符串数组
EXTRA_INTENT 使用ACTION_PICK_ACTIVITY动作时装有Intent选项的键
EXTRA_KEY_EVENT 触发该Intent的案件的KeyEvent对象
EXTRA_PHONE_NUMBER 使用拨打电话相关的Action时,电话号码字符串的键,类型为String
EXTRA_SHORTCUT_ICON:使用ACTION_CREATE_SHORTCUT在HomeActivity创建快捷方式时,对快捷方式的描述信息。其中ICON和ICON_RESOURCE描述的是快捷方式的图标,类型分别为Bitmap和ShortcutIconResource。INTENT描述的是快捷方式相对应的Intent对象。NAME描述的是快捷方式的名字
EXTRA_SHORTCUT_ICON_RESOURCE EXTRA_SHORTCUT_INTENT EXTRA_SHORTCUT_NAME EXTRA_SUBJECT :描述信息主题的键
EXTRA_TEXT 使用ACTION_SEND动作时,用来描述要发送的文本信息,类型为CharSequence
EXTRA_TITLE 使用ACTION_CHOOSER动作时,描述对话框标题的键,类型为CharSequence
EXTRA_UID 使用ACTION_UID_REMOVED动作时,描述删除的用户id的键,类型为int

flags( 标记)

  • 标记是意图的可选部分,说明Android系统如何来启动活动,启动后如何处理等。
标记 说明
FLAG_ACTIVITY_CLEAR_TASK  如果在意图中设置,并通过 Context.startActivity 传递,这个标记将导致与该活动相关联的所有已存在的任务在活动启动前被清空。活动将成为一个空任务的根,所有旧的活动被结束。该标记可以与 FLAG_ACTIVITY_NEW_TASK 结合使用。
FLAG_ACTIVITY_CLEAR_TOP  如果设置该标记,活动将在当前运行的任务中被启动。这并不会启动一个新的活动实例,所有的在它之上的活动被关闭,这个意图作为一个新的意图被传递到已有的(目前在顶部的)活动。
FLAG_ACTIVITY_NEW_TASK  这个标记一般用于使得活动用于"启动器"风格的行为:为用户提供一个可以独立完成运行的数据,并启动完整儿独立的活动。
FLAG_ACTIVITY_SINGLE_TOP 栈顶单实例(当该activity处于task栈顶时,可以复用,直接onNewIntent)

··············下一篇《Android 显式意图(Intent) 与 隐式意图》

Android 意图(Intent) 理论详解相关推荐

  1. 【Android】 Intent应用详解

    转载:http://blog.csdn.net/liuhe688/article/details/7162988 看似尋常最奇崛,成如容易卻艱辛.北宋.王安石 看似普通的事情其实最不同寻常,并不是简简 ...

  2. Android应用开发—Intent组件详解

    转载自:Android中Intent组件详解 Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件. Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的 ...

  3. Android Intent机制详解

    什么是Intent  Intent 是一个将要执行的动作的抽象描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯.比如说调用startActivity()来启动一 ...

  4. Android自定义属性,format详解

    1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name="名称"><attr name="bac ...

  5. Android的Logcat命令详解:翻译Enabling logcat Logging

    Android的Logcat命令详解 --翻译Enabling logcat Logging 田海立@CSDN 2011/07/28 Android LOG系统提供了收集和查看系统调试输出的功能.各种 ...

  6. Android WebView(一) WebView详解

    WebView,在Android开发中,我们总是会遇到,它是Google封装的,使用WebKit渲染引擎加载显示网页.接下来,我们就详细看看WebView的介绍以及使用.如果你想了解WebView主要 ...

  7. Android网页浏览器开发详解(一)

    Android网页浏览器开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Androi ...

  8. 《Android NFC开发实战详解》——6.4节Android NFC P2P开发进阶

    本节书摘来自异步社区<Android NFC开发实战详解>一书中的第6章,第6.4节Android NFC P2P开发进阶,作者 赵波,更多章节内容可以访问云栖社区"异步社区&q ...

  9. Android设备扫描机制详解

    Android设备扫描机制详解 本文基于Android pie,对Android的设备扫描机制做一个全面的解析,由于本人掌握的知识有限,如有讲错的地方还请大家指出来. Android提供了一套扫描机制 ...

  10. ANDROID L——Material Design详解(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

最新文章

  1. Docsify个人网站搭建详细教程
  2. 用stm32f10x建立新的工程重要步骤
  3. RDKit | 可视化分子来自于xyz文件
  4. 为什么品牌商纷纷搭建自己的商城小程序?
  5. 变分模态分解_Android小部件示例中的模态对话框(弹出)
  6. X.509证书的介绍
  7. IOS开发基础之模拟科技头条项目案例32
  8. jeesite的junit,数据没有插入?
  9. 美团点评基于MGR的CMDB高可用架构搭建之路【转】
  10. JAVA——实现json bean实体类的传参校验模板及注解详解
  11. 计算机普通话培训开班简报,普通话培训第四期简报.doc
  12. 腾讯2018春招笔试题,翻转数列
  13. 斯坦福NLP名课带学详解 | CS224n 第6讲 - 循环神经网络与语言模型(NLP通关指南·完结)
  14. 超级详细的pytest测试和allure测试报告
  15. go浏览器java_GO浏览器JAVAWP版下载_GO浏览器JAVA2016最新版_GO浏览器JAVA1.2.2-华军软件园...
  16. virtualbox安装.img文件
  17. Windows系统压缩卷时可压缩空间远小于实际剩余空间解决方法
  18. App开发者如何选择移动广告平台1 - 开发者规模分析
  19. 国产化机器视觉嵌入式主板RK3399
  20. cesium 关于feature的知识点

热门文章

  1. Android类参考---Fragment(二)
  2. 用例规约要细致到万无一失吗?
  3. 英伟达最大gpu_摩尔定律未死,黄律定律已出!英伟达要用GPU推动AI性能逐年翻倍...
  4. 拓端tecdat|python主题建模可视化LDA和T-SNE交互式可视化
  5. python和django的关系_Django一对一关系实践
  6. python和Java实现斐波那契Fibonacci数列
  7. Java之面试基础知识学习笔记
  8. 25张图让你读懂神经网络架构
  9. matlab iir滤波器设计 实验报告,IIR数字滤波器的设计实验报告
  10. 营山天气预报软件测试,营山天气预报15天