也就是说,发送"意图"的组件通过Intent对象所包括的内容。来启动指定的(即Component属性)或通过筛选(即Action&Category属性)的某(些)组件,然后实施对应的动作(即Action属性)并传递对应的数据(即Data属性)以便完毕对应的动作。
这时我们就须要通过Intent Filters中的子元素进行信息匹配。从而确定当前包括Intent Filters属性的Activity是不是我们要启动的那个(些)组件。即发送"意图"组件配置好intent对象,被启动组件实现Intent Filters属性,最后。发送组件会依据被启动组件AndroidMainFest.xml中的<Intent Filters/>信息来确定它是不是目标组件。
Intent代表了Android应用的启动"意图"。Android应用将会依据Intent来启动指定组件,至于究竟启动哪个组件,则取决于Intent的属性。
(1)自己定义字符串 public final String CUSTOME_ACTION="intent.action.CUSTOME_JIANG";//字符串能够随意 Intent intent=new Intent(); intent.setAction(ActionAttr.CUSTOME_ACTION); //注意:ActionAttr为我们创建的类,也能够使用this.CUSTOME_ACTION (2)使用系统预定action常量 Intent intent=new Intent(); intent.setAction(Intent.ACTION_CALL); //当中ACTION_CALL为Intent类的静态成员变量,能够类直接调用 //相应字符串"android.intent.action.CALL"
这里须要注意的是,Data属性仅仅接受一个Uri对象,一个Uri对象通常通过例如以下形式的字符串来表示:
Intent intent=new Intent(); String data="content://com.android.contacts/contacts/1"; Uri uri=Uri.parse(data);//将字符串转换为Uri intent.setData(uri); 或者 Intent intent=new Intent(); intent.setData(Uri.parse("content://com.android.contacts/contacts/1"));
Category属性能够自己定义字符串实现。但为了方便不同应用之间的通信还能够设置系统提前定义的Category常量。
调用方法addCategory 用来为Intent 加入一个Category。方法removeCategory 用来移除一个Category;getCategories方法返回已定义的Category。
(1)自己定义字符串 public final String CUSTOME_CATEGORY="intent.action.CUSTOME_CATEGORY";//字符串能够随意 Intent intent=new Intent(); intent.addCategory(ActionAttr.CUSTOME_CATEGORY); (2)使用系统预定action、category常量 下面代码实现当点击某个button时,通过Intent对象实现返回HOME桌面。Intent intent=new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME);//返回Home桌面
在Android中,全部应用主Activity(就是单独启动时候。第一个执行的那个Activity...)。都须要能够接受一个Category为 CATEGORY_LAUNCHER,Action为ACTION_Main的意图。
对于发出"意图"的组件。我们能够通过setAction()、addCategory()方法为"意图"加入action属性或者同一时候加入Action、Category属性;对于接收"意图"的组件,在AndroidManifest.xm文件里,我们能够这样设置:
另外,假设我们使用了系统提前定义的action常量,则须要在AndroidManifest.xm文件里加入对应的权限,这方面的内容我们将在第二部分讲到。
但事实上不然,Type信息。是用MIME来表示的,比方text/plain。这种东西。
讲到这里。两者区别就非常清晰了,Data就是门牌号,指明了详细的位置。详细问题详细分析。而type,则是强调物以类聚,解决一批量的问题。实际的样例是这种。比方,从某个应用拨打一个电话,会发起的是action为ACTION_DIAL且data为tel:xxx这种Intent。相应的人类语言就是拨打xxx的电话。非常具象。而假设使用type,就宽泛了很多,比方浏览器收到一个未知的MIME类型的数据(比方一个视频...),就会放出这种Intent。求系统的其它应用来帮助,表达成自然语言应该就是:查看pdf类文档,这种。
最早的HTTP协议中,并没有附加的数据类型信息,全部传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能依据其类型进行处理。
然而当它被HTTP协议支持之后。它的意义就更为显著了。
它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。每一个MIME类型由两部分组成,前面是数据的大类别,比如声音audio、图象image等,后面定义详细的种类。
每个Action都会有与之相应的key和value类型约定。发起Intent的时候,须要依照要求把Data不能表示的额外參数放入Extras中。
比方,你期望这个意图的执行者,和你执行在两个全然不同的任务中(或说进程也无妨吧...),就须要设置FLAG_ACTIVITY_NEW_TASK 的标志位。
Intent Filters它是用来描写叙述一个Activity或 Serveice等组件,我们通过在组件AndroidManifest.xml中<intent-ilters/>元素中加入<action/>等属性。以满足期望可以响应怎么样的Intent,这样的没有指明要启动组件名方式就称之为隐式intent。
当然,我们也可以使"意图"实现启动指定的组件,即称之为显示intent,主要通过Component属性来实现。Intent的Component属性须要接受一个ComponentName对象,这个对实现将要启动指定组件的类名、类所在的包名绑定在intent上。
ComponentName comp=new ComponentName(ComponentAttr.this,SecondaryActivity.class); Intent intent=new Intent(); intent.setComponent( comp);//设置intent的Component属性,指定"意图"要启动组件的包和类名 凝视:第一句用于创建一个ComponentName对象,来指定包名和类型-这就能够唯一地确定一个组件类。
void |
startActivity(Intent intent)
作用:启动Activity,详细启动哪个Activity和怎么样启动由intent属性决定
|
void |
startActivityForResult(Intent
intent, int requestCode)
作用:启动Activity,并返回一个结果。当被启动的Activity退出时。会调用 onActivityResult() 方法并向其传入一个 requestCode參数,这个 requestCode參数为非负数(>0)。作用是标志是哪个Activity组件发出的"意图",须要注意的是假设 requestCode小于0时,这种方法的仅仅能用于启动一个Activity而不能返回值了。
另外,Intent的action属性设为可以返回一个结果,假设设置为 |
|
|
|
|
|
|
|
|
|
为一个指定的组件创建一个带action和data属性的意图
|
addCategory(String category)
Add a new category to the intent.
|
|
addFlags(int
flags)
Add additional flags to the intent (or with existing flags value).
|
|
Retrieve the general action to be performed, such as
ACTION_VIEW . |
|
Return the set of all categories in the intent.
|
|
Retrieve the concrete component associated with the intent.
|
|
getData()
Retrieve data this intent is operating on.
|
|
Retrieves a map of extended data from the intent.
|
|
int
|
getFlags()
Retrieve any special flags associated with this intent.
|
static Intent
|
This method was deprecated in API level 4. Use
parseUri(String,
int) instead. |
Retrieve the application package name this Intent is limited to.
|
|
Return the scheme portion of the intent‘s data.
|
|
Return the specific selector associated with this Intent.
|
|
Get the bounds of the sender of this intent, in screen coordinates.
|
|
getType()
Retrieve any explicit MIME type included in the intent.
|
|
boolean
|
hasCategory(String category)
Check if a category exists in the intent.
|
boolean
|
Returns true if an extra value is associated with the given name.
|
static Intent
|
makeMainActivity(ComponentName mainActivity)
Create an intent to launch the main (root) activity of a task.
|
static Intent
|
makeMainSelectorActivity(String selectorAction, String selectorCategory)
Make an Intent for the main activity of an application, without specifying a specific activity to run but giving a selector to find the
activity.
|
static Intent
|
parseIntent(Resources resources, XmlPullParser parser, AttributeSet attrs)
Parses(解析) the "intent" element (and its children) from XML and instantiates an Intent object.
|
static Intent
|
Create an intent from a URI.
|
Add extended data to the intent.
|
|
putExtra(String name, CharSequence value)
Add extended data to the intent.
|
|
Set the general action to be performed.
|
|
Convenience for calling
setComponent(ComponentName) with
the name returned by a Class object. |
|
setClassName(Context packageContext, String className)
Convenience for calling
setComponent(ComponentName) with
an explicit class name. |
|
setClassName(String packageName, String className)
Convenience for calling
setComponent(ComponentName) with
an explicit application package name and class name. |
|
setComponent(ComponentName component)
(Usually optional) Explicitly set the component to handle the intent.
|
|
Set the data this intent is operating on.
|
|
setFlags(int
flags)
Set special flags controlling how this intent is handled.
|
|
setPackage(String packageName)
(Usually optional) Set an explicit application package name that limits the components this Intent will resolve to.
|
|
void
|
Set the bounds of the sender of this intent, in screen coordinates.
|
Set an explicit MIME data type.
|
|
toString()
Returns a string containing a concise(简洁), human-readable (可读)description of this object.
|
|
toUri(int
flags)
Convert this Intent into a String holding a URI representation of it.
|
ACTION_MAIN
//传递返回到主Activity动作
ACTION_VIEW
//传递显示动作
ACTION_ATTACH_DATA
ACTION_EDIT
//传递编辑动作
ACTION_PICK
ACTION_CHOOSER
//传递选择动作
ACTION_GET_CONTENT
ACTION_DIAL
ACTION_CALL
ACTION_SEND
ACTION_SENDTO
ACTION_ANSWER
//传递接听电话动作
ACTION_INSERT
ACTION_DELETE
ACTION_RUN
ACTION_SYNC
ACTION_PICK_ACTIVITY
ACTION_SEARCH
ACTION_WEB_SEARCH
ACTION_FACTORY_TEST
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
EXTRA_ORIGINATING_URI
EXTRA_PHONE_NUMBER
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
getFlags()
addFlags(int)
FLAG_GRANT_READ_URI_PERMISSION
FLAG_GRANT_WRITE_URI_PERMISSION
FLAG_GRANT_PERSISTABLE_URI_PERMISSION
FLAG_GRANT_PREFIX_URI_PERMISSION
FLAG_DEBUG_LOG_RESOLUTION
FLAG_FROM_BACKGROUND
FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
FLAG_ACTIVITY_MULTIPLE_TASK
FLAG_ACTIVITY_NEW_DOCUMENT
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_NO_ANIMATION
FLAG_ACTIVITY_NO_HISTORY
FLAG_ACTIVITY_NO_USER_ACTION
FLAG_ACTIVITY_PREVIOUS_IS_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_TASK_ON_HOME
FLAG_RECEIVER_REGISTERED_ONLY
Android笔记一.深入理解Intent和IntentFilters(一)
原文:http://www.cnblogs.com/yangykaifa/p/6708447.html