Intent简介

官方解释:
An intent is an abstract description of an operation操作 to be performed展示、表演. It can be used with startActivity to launch an Activity, broadcastIntent to send it to any interested感兴趣的 BroadcastReceiver components组件, and startService(Intent) or bindService(Intent, ServiceConnection, int) to communicate通信 with a background Service.

An Intent provides a facility工具、设备 for performing late runtime binding绑定 between the code in different applications. Its most significant重要的 use is in the launching of activities, where it can be thought of as the glue胶合 between activities. It is basically基本 a passive被动的 data structure holding an abstract description of an action to be performed.

Intent 是Android程序中各个组件之间进行交互的重要方式之一,它既可以在当前Activity中指定想要完成的动作,还可以在不同组件间进行数据传递。
Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递。通过其自带的属性,可以方便的完成很多较为复杂的操作。例如直接调用拨号功能、直接自动调用合适的程序打开不同类型的文件等等。诸如此类,都可以通过设置Intent属性来完成。

显式意图:必须指定要激活的组件的类名和完整包名,一般激活自己应用的组件的时候采用显示意图
隐式意图:只需要指定要动作和数据就可以,激活别人应用的时候使用, 不需要关心对方的包名和类名

Intent的组成结构

Intent对象由以下六个部分组成:
1、Component name
  Component name即组件名称,是要【处理】这个Intent对象的组件名称。
  组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。
  组件名称通过 setComponent(),setClass(),setClassName()设置,通过getComponent()获取。
  需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件;如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
2、Action
  Action是指Intent要完成的动作,是一个字符串常量。使用 setAction() 和 getAction()来设置和读取Action属性。
        注意:一个Intent只能指定一个action,但是一个Activity(或广播等组件)可以设置(监听、匹配)多个action(即intent-filter中可以设置多个action属性),这是两个不同的概念!
3、Data
  Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。
        Data通常是Uri格式定义的操作数据
  当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
  很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。
  数据类型也可以显式指定,比如setData(Uri)方法指定数据为Uri,setType(String type) 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。
4、Category
  Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类,一般在隐式地启动activity时需要用到。
        与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories()。默认为CATEGORY_DEFAULT 。
5、Extras
  传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。
6、Flags
  各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。

Intent操作常用API

1、Activity中的相关方法
public Intent getIntent()
protected void onActivityResult(int requestCode, int resultCode, Intent data)
public final void setResult(int resultCode, Intent data)

父类中的方法
public ComponentName startService(Intent service) 
public boolean stopService(Intent name)
public boolean bindService(Intent service, ServiceConnection conn, int flags)
public void unbindService(ServiceConnection conn)
public void sendBroadcast(Intent intent, String receiverPermission) 


2、Intent的构造方法
Intent()
Intent(Context packageContext, Class<?> cls)
Intent(Intent o)
Intent(String action)
Intent(String action, Uri uri)//Uri即为通过setData设置的数据
Intent(String action, Uri uri, Context packageContext, Class<?> cls)

3、Intent 中的相关方法
public Intent addCategory(String category) 为一个intent对象增加一个category
public Set<String> getCategories()
public Intent putExtra(String name, Bundle value)//可以添加基本类型、数组、CharSequence、Serializable、Parcelable、Bundle等类型的数据
public Bundle getExtras()
public Intent setAction(String action)
public Intent setClass(Context packageContext, Class<?> cls)
public Intent setData(Uri data)
public Intent setDataAndType(Uri data, String type)//Set an explicit MIME data type.

Intent中定义的Action常量

Standard Activity Actions
These are the current standard actions that Intent defines for launching activities (usually through Context.startActivity. The most important, and by far most frequently used, are ACTION_MAIN and ACTION_EDIT. 
ACTION_MAIN //Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明
ACTION_VIEW //系统根据不同的Data类型,通过已注册的对应Application显示数据。
ACTION_ATTACH_DATA //
ACTION_EDIT //系统根据不同的Data类型,通过已注册的对应Application编辑示数据。
ACTION_PICK //从图库获取照片
ACTION_CHOOSER //
ACTION_GET_CONTENT //
ACTION_DIAL //打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。
ACTION_CALL //直接呼叫Data中所带的号码
ACTION_SEND //由用户指定发送方式进行数据发送操作
ACTION_SENDTO //系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作
ACTION_ANSWER //接听来电
ACTION_INSERT //
ACTION_DELETE //卸载应用程序
ACTION_RUN //
ACTION_SYNC //同步手机与数据服务器上的数据
ACTION_PICK_ACTIVITY //
ACTION_SEARCH //
ACTION_WEB_SEARCH //
ACTION_FACTORY_TEST //

Standard Broadcast Actions
These are the current standard actions that Intent defines for receiving broadcasts (usually through Context.registerReceiver or a <receiver> tag in a manifest). 
ACTION_TIME_TICK  //
ACTION_TIME_CHANGED  //Android系统的时间发生改变后发出带有此Action的广播
ACTION_TIMEZONE_CHANGED  //改变时区警告
ACTION_BOOT_COMPLETED  //Android系统在启动完毕后发出带有此Action的广播
ACTION_PACKAGE_ADDED  //Android系统安装了新的Application之后发出带有此Action的广播
ACTION_PACKAGE_CHANGED  //Android系统中已存在的Application发生改变之后(如应用更新操作)发出带有此Action的广播
ACTION_PACKAGE_REMOVED  //卸载了Android系统已存在的Application之后发出带有此Action的广播
ACTION_PACKAGE_RESTARTED  //
ACTION_PACKAGE_DATA_CLEARED  //
ACTION_UID_REMOVED  //
ACTION_BATTERY_CHANGED  //
ACTION_POWER_CONNECTED  //
ACTION_POWER_DISCONNECTED  //
ACTION_SHUTDOWN  //

Intent中定义的Category常量

Standard Categories
These are the current standard categories that can be used to further clarify an Intent via addCategory. 
CATEGORY_DEFAULT  //Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_BROWSABLE  //能够被浏览器安全调用的activity必须支持这个category。设置该组件可以使用浏览器启动
CATEGORY_ALTERNATIVE  //设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action  
CATEGORY_SELECTED_ALTERNATIVE  //设置这个activity是否可以被认为是用户当前选择的数据的一个可选择的action  
CATEGORY_TAB  //想要在已有的TabActivity内部作为一个Tab使用  
CATEGORY_LAUNCHER  //设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 
CATEGORY_INFO  //
CATEGORY_HOME  //主activity,当应用程序启动时,它是第一个显示的activity
CATEGORY_PREFERENCE  //这个activity是一个选项卡
CATEGORY_DEVELOPMENT_PREFERENCE  //
CATEGORY_EMBED  //可以运行在父activity容器内
CATEGORY_APP_MARKET  //这个activity允许用户浏览和下载新的应用程序  
CATEGORY_MONKEY  //这个activity可能被monkey或者其他的自动测试工具执行  
CATEGORY_TEST  //供测试使用(一般情况不使用)  
CATEGORY_UNIT_TEST  //联合测试使用  
CATEGORY_SAMPLE_CODE  //作为一个简单的代码示例使用(一般情况下不使用)  
CATEGORY_OPENABLE  //用来指示一个GET_CONTENT意图只希望ContentResolver.openInputStream能够打开URI  
CATEGORY_CAR_DOCK  //
CATEGORY_DESK_DOCK  //
CATEGORY_LE_DESK_DOCK  //
CATEGORY_HE_DESK_DOCK  //
CATEGORY_CAR_MODE  //
CATEGORY_APP_BROWSER  //和ACTION_MAIN一起使用,用来启动浏览器应用程序  
CATEGORY_APP_CALCULATOR  //和ACTION_MAIN一起使用,用来启动计算器应用程序  
CATEGORY_APP_CALENDAR  //和ACTION_MAIN一起使用,用来启动日历应用程序  
CATEGORY_APP_CONTACTS  //和ACTION_MAIN一起使用,用来启动联系人应用程序  
CATEGORY_APP_EMAIL  //和ACTION_MAIN一起使用,用来启动邮件应用程序  
CATEGORY_APP_GALLERY  //和ACTION_MAIN一起使用,用来启动图库应用程序  
CATEGORY_APP_MAPS  //和ACTION_MAIN一起使用,用来启动地图应用程序  
CATEGORY_APP_MESSAGING  //和ACTION_MAIN一起使用,用来启动短信应用程序  
CATEGORY_APP_MUSIC  //和ACTION_MAIN一起使用,用来启动音乐应用程序  

Intent中定义的Extra常量

Standard Extra Data
These are the current standard fields that can be used as extra data via putExtra. 
EXTRA_ALARM_COUNT 
EXTRA_BCC 存放邮件密送人地址的字符串数组
EXTRA_CC 存放邮件抄送人地址的字符串数组
EXTRA_CHANGED_COMPONENT_NAME 
EXTRA_DATA_REMOVED 
EXTRA_DOCK_STATE 
EXTRA_DOCK_STATE_HE_DESK 
EXTRA_DOCK_STATE_LE_DESK 
EXTRA_DOCK_STATE_CAR 
EXTRA_DOCK_STATE_DESK 
EXTRA_DOCK_STATE_UNDOCKED 
EXTRA_DONT_KILL_APP 
EXTRA_EMAIL 存放邮件地址的字符串数组
EXTRA_INITIAL_INTENTS 
EXTRA_INTENT 
EXTRA_KEY_EVENT 以KeyEvent对象方式存放触发Intent的按键
EXTRA_ORIGINATING_URI 
EXTRA_PHONE_NUMBER 存放调用ACTION_CALL时的电话号码
EXTRA_REFERRER 
EXTRA_REMOTE_INTENT_TOKEN 
EXTRA_REPLACING 
EXTRA_SHORTCUT_ICON 
EXTRA_SHORTCUT_ICON_RESOURCE 
EXTRA_SHORTCUT_INTENT 
EXTRA_STREAM 
EXTRA_SHORTCUT_NAME 
EXTRA_SUBJECT 存放邮件主题字符串
EXTRA_TEMPLATE 
EXTRA_TEXT 存放邮件内容
EXTRA_TITLE 
EXTRA_UID 

Intent中定义的Flag常量

FLAG_GRANT_READ_URI_PERMISSION  //
FLAG_GRANT_WRITE_URI_PERMISSION  //
FLAG_FROM_BACKGROUND  //
FLAG_DEBUG_LOG_RESOLUTION  //
FLAG_EXCLUDE_STOPPED_PACKAGES  //
FLAG_INCLUDE_STOPPED_PACKAGES  //
FLAG_ACTIVITY_NO_HISTORY  //退出后不会存在于任务栈中
FLAG_ACTIVITY_SINGLE_TOP  //单一顶部
FLAG_ACTIVITY_NEW_TASK  //在新任务栈中打开
FLAG_ACTIVITY_MULTIPLE_TASK  //
FLAG_ACTIVITY_CLEAR_TOP  //若此Activity已存在于任务栈中,再次启动时弹出它所有顶部的Activity
FLAG_ACTIVITY_FORWARD_RESULT  //
FLAG_ACTIVITY_PREVIOUS_IS_TOP  //
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS  //
FLAG_ACTIVITY_BROUGHT_TO_FRONT  //
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED  //
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY  //
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET  //
FLAG_ACTIVITY_NO_USER_ACTION  //
FLAG_ACTIVITY_REORDER_TO_FRONT  //
FLAG_ACTIVITY_NO_ANIMATION  //
FLAG_ACTIVITY_CLEAR_TASK  //
FLAG_ACTIVITY_TASK_ON_HOME  //
FLAG_RECEIVER_REGISTERED_ONLY  //
FLAG_RECEIVER_REPLACE_PENDING  //
FLAG_RECEIVER_FOREGROUND  //
FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT  //
FLAG_RECEIVER_BOOT_UPGRADE  //

Intent 意图 结构 简介的更多相关文章

  1. Intent和IntentFilter简介

    Intent和IntentFilter简介 Intent和IntentFilter简介 意图Intent分类: 显式意图:利用class找到对方,在同一个应用程序类可以方便使用,但是在不同的应用程序无 ...

  2. 老李分享:jvm结构简介 1

    老李分享:jvm结构简介     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  3. Laravel 文件夹结构简介

    表 1.1:Laravel 文件夹结构简介 文件夹名称 简介 app 应用程序的业务逻辑代码存放文件夹 app/Console 存放自定义 Artisian 命令文件 app/Http/Control ...

  4. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...

  5. Android 之 Intent(意图)

    Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图.接下来分别针对这两种意图进行讲解. 显式意图:通过指定一组数据或动作,激活应用内部的 activity:(相比隐式意图,此做法 ...

  6. Intent(意图)

    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”. 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter&g ...

  7. 什么是Intent(意图)

    1.Intent是一种运行时绑定(runtime bingding)机制,它能在程序运行的过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种 请求或者意愿,Android ...

  8. Android开发学习之路--Android Studio项目目录结构简介

    既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...

  9. 玩转Android---组件篇---Intent(意图)

    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”. 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter&g ...

随机推荐

  1. oracle PL/SQL程序设计

    declare 说明部分    (变量说明,光标申明,例外说明 ] begin 语句序列   (DML语句]… exception 例外处理语句 End; /

  2. IO流(数据流

    数据流 创建一个输入或者输出流只想底层的输入输出流 File file1=new File("test1.txt"); FileOutputStream out1=new File ...

  3. 转:十条不错的编程观点。(出处:酷 壳 – CoolShell.cn)

    在Stack Overflow上有这样的一个贴子<What’s your most controversial programming opinion?>,翻译成中文就是“你认为最有争议的 ...

  4. 转载:详解CSS选择器、优先级与匹配原

    转载网址:http://polaris1119.javaeye.com/blog/764428 文章就CSS选择器的优先级问题做了一些总结,严格来讲,选择器的种类可以分为三种:标签名选择器.类选择器和 ...

  5. phpcms V9 修改生成静态文件路径/html

    在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...

  6. smarty 中时间格式化的用法

    大家都知道PHP中输出时间和日期可以用 date("Y-m-d H:i:s",时间戳)  , 但是在smarty模板中,$time|date_format:'%Y-%m-%d %H ...

  7. winform中WebBrowser控件执行脚本

    在实际应用中我们可能需要WebBrowser控件主动执行我们需要的脚本,执行脚本现在有两种方法. 1.WebBrowser控件加载脚本,简单方便,适用于简短的脚本,无法执行复杂操作. webBrows ...

  8. nodejs 在headers添加内容发送到后端

    app.all('*', function(req, res, next){ req.headers['COOKIE'] = 'Your Cookie' next() })

  9. CreateLiveCMSV4.0 漏洞,无需后台Get shell

    Title:CreateLiveCMSV4.0 漏洞,无需后台Get shell --2012-03-06 17:28 标题:CreateLive CMS Version 4.0.1006 漏洞,无需 ...

  10. DOCKER内部安装指南

    本文介绍如何在RedHat/CentOS环境下安装Docker.官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中.由于RHEL6和CentOS6的内核版本为2 ...