Intent 意图 结构 简介

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  //

来自为知笔记(Wiz)

时间: 2024-08-01 16:06:08

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

Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中, 对Android UI做了初步的了解和学习,本篇继续进行Android开发学习的整理.Android应用通常由一个或多个基本组件组成,最常用的就是 Activity,本篇我们就来整理一下Activity活动的相关知识,以及Activity之间相互通信的Intent意图. 首先,我们来简单的介绍一下Activity 活动,如图所示(来自百度百科):

Intent(意图)的使用

Intent(意图)-------------------------------Intent的作用主要是激活系统组件,以及在系统组件之间传递数据.Intent的核心属性:1) ComponentName:组件名称 ComponentName用于激活系统组件时,指定被激活的组件名称2) Extra:附加数据 Extra用于向Intent对象内部封装数据,当该Intent被用于激活组件时,被激活的组件就可以拿到该Intent,从而获取之前封装的数据. 可以在Intent中直接封装的数据类型相对比较

Android开发:显式/隐式Intent意图跳转Activity总结

显式跳转 在已知包名和类名的情况下常用的跳转方法: 是 nt mIntent = new Intent(); mIn Int etent.setClassName("com.android.settings","com.android.settings.Settings"); mContext.startActivity(mIntent); 我们也常这么用: y.class); startActivity(intent); 这是跳转到当前应用的某个Activity,

opencv Iplimage结构简介

IplImage 结构解读: typedef struct _IplImage{int nSize;                    /* IplImage大小 */int ID;                         /* 版本 (=0)*/int nChannels;           /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */int alphaChannel; /* 被OpenCV忽略 */int depth; /* 像素的位深度: IPL_DEPT

ORACLE内存结构简介

ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果没有掌握基础理论体系,而直接生搬硬套一些维护技术经验,那也只是空中楼阁罢了.而如果你想直接通过一两篇文章学到什么秘籍成为维护或是DB优化高手那也是不现实的.所以这些文适合静下心来真正想了解学习ORALCE体系的读者.方法论掌握好,起码头脑中的思路方向是正确的,至于术也就是水到渠成. 我们通常所说的O

C++ 结构简介

C++结构体定义 struct inflatable { char name[20]; float volume; double price; } C++创建结构本: inflatable guest= { "Glorious Gloria", 1.88, 29.99 }; 在C中是要加上struct前缀的,而C++可以省略: 访问:  如guest.volume等; 结构体声明的位置很重要: 1,放上main()里的最开始位置:内部声明,只能被所属函数使用 2,放在main()的前面

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

Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”. 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter>元素来过滤. Intent在由以下几个部分组成:动作(action),数据(data),分类(Category),类型(Type),组件(Component),和扩展信息(Extra). Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定:第二,通过Intent Filter过滤指定

数据结构中常用树型结构简介

B树.B-树.B+树.B*树.红黑树rbtree 二叉排序树.trie树Double Array 字典查找树 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报

Android中的Intent(意图)的使用

概述: Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦. 分类: 隐式意图 不用指定要打开的activity, 通过动作和数据的组合去查找系统中, 能处理指定动作和数据的界面,因此