Intent 意图 结构 简介-LMLPHP

官方解释:
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对象由以下六个部分组成:
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类中。

1、Activity中的相关方法
public Intent getIntent()
protected void onActivityResult(int requestCode, int resultCode, Intent data)
public final void setResult(int resultCode, Intent data)
Intent 意图 结构 简介-LMLPHP
父类中的方法
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) 
Intent 意图 结构 简介-LMLPHP

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.

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

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一起使用,用来启动音乐应用程序  

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 

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

05-06 06:23