Intent对象若干数据项的含义总结

Intent作为组件之间通信的手段和协议,包含了诸如Action、Data、Type、Category、Component、Extras和Flags等数据项,各自拥有各自的含义和作用。当调用组件发出一个intent的时候,组件管理器会根据所设置的这些数据项来评判应该创建和启动哪个或者哪些被调用组件。

总结如下:

Action

作为通信的动作的主题,相当于一句话主谓宾中的谓语(主语即调动组件自己)。比如“我要某人打开一张图片”,Action即“打开”的意思。Action的名字遵从java的包名定义的方式从而保证了唯一性,比如com.company.sample.action.ACTION_OPEN。

标准的Action比如Intent.ACTION_SEND,Intent.ACTION_VIEW等

Data

表达了动作所带有的操作目标,相当于“我要某人打开一张图片”中的一张图片的意思,即宾语。表示这个动作所附带的主体数据是什么。通过Intent.setData或者Intent.setDataAndType来设置,为字符串格式,格式通常用URI来表示。一个URI通常带有scheme、host、port、path等字段。比如一个表示本地的一个文件的data大致为:

file:///sdcard/file.txt

或者是请求一个web的URI:

http://www.baidu.com/main/1

Type

描述了操作目标的类型需求,通常和Data字段的设置是互斥的,即若设置了Type则前头设置的Data会被清掉。一般来说Data用于特指的数据,Type用于泛指的数据。

比如ACTION_SEND这个action要发送一个图片时,应该用Intent.setType来设置万类型为"image/jgp"表示被调用组件是能够打开图片类型的,但是实际上被调用组件可以有多个,当有多个的时候则会出现组件选择框。

而ACTION_SENDTO这个action通常已经制定了调用组件,所以通常用setData来设置操作目标。

有时候Data和Type是相铺相成的需要同时设置,比如打开一张图片,即需要说明type类型,又要给出图片文件的位置,那么这个时候需要用intent.setDataAndType("file:///sdcard/img.data","image/jpg")

Category

表述了一个附件条件,如果说“我要某人打开一张图片”是有条件的,条件是这个某人是个大学生,那么“大学生”就是这个category。

系统默认的几个category中最常见的就是Intent.CATEGORY_LAUNCHER了,每一个app的入口activity在manifest中都要加入Intent.CATEGORY_LAUNCHER这个category的描述。事实上是为了让homescreen程序在点击这个app的时候能够找到这个入口activity。所以说Homescreen程序发出来intent给这个所被点击的app的时候加上Intent.CATEGORY_LAUNCHER的category,意图是想进入这个app的入口组件,所以加入了Intent.CATEGORY_LAUNCHER的组件就会被启动

Component

Intent启动组件分类显式(explicit)和隐式(implicit),若给intent设置了component,即Intent.setComponent(或者是setClass)那么表示这个intent已经设置好了要启动哪个组件了,这个时候组件管理器只要老老实实的按照所设置的来启动和创建组件即可。这个时候intent则变成了单纯的信息载体,传递数据给被调用组件使用

Extras

即给intent附带的数据。负责将数据从调用组件传递到被调用组件。数据内容是一个android.os.Bundle类型,按照键值对方式存储,它继承了android.os.Parcelable接口,即可序列化和反序列化,这样子既可以在进程间通讯中用来传递。通过intent.setExtras来加入数据,用intent.getExtras来获取数据。android默认的extras类型中大多是和Action相关联的。比如:

ACTION_SEND中用intent.EXTRA_TEXT来保存要发送的文本内容,intent.EXTRA_SUBJECT用来添加内容的主题。

Flags

一些标志位,通常和任务模型和进程模型相关,有的适合安全机制相关,比如FLAG_GRANT_READ_URI_PERMISSION用来给被调用者一次性的免permission的获取数据的权限。

FLAG_ACTIVITY_NEW_TASK标志位被设置后,会在新的任务中创建被调用组件。

intent.setFlags用来清除性的设置新的标志位,intent.addFlags用来保留原有的添加新的标志位

时间: 2024-10-08 19:17:55

Intent对象若干数据项的含义总结的相关文章

Intent对象初步

说明:初探Intent对象.这里主要讲使用Intent对象在Activity之间传递数据的方法. 例子:由MainActivity→OtherActivity的跳转过程中,把数据传递给OtherActivity并显示出来. 在讲步骤之前,先来看看Intent究竟是个什么东西先. Intent对象的基本概念: 1.Intent对象是Android应用程序组件之一: 2.Intent对象在Android系统当中表示一种意图: 3.Intent当中最重要的内容是action和data. 步骤:1.在M

【Android 初学】10、Intent对象的使用

Start Android 1.Intent对象的基本概念 1)Intent是Android应用程序组件之一: 2)Intent对象在Android系统当中表示一种意图: 3)Intent当中最重要的内容是action与data: 2.Intent对象的基本使用方法 3.使用Intent在Activity之间传递数据的方法 1)在Activity之间可以通过Intent对象传递数据: 2)使用putExtra()系列方法向Intent对象当中存储数据 3)使用getXXXExtra()系列方法从

Intent对象

Intent对象 Intent是Android应用程序之一,其在系统中表示一种意图,Intent当中最重要的内容是action与data,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

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>,该文对本文要使用的action.category以及data都进行了详细介绍. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 概述 我们知道,Intent是分两种的:显式Intent和隐式Intent.如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否

Android笔记八.Intent对象的使用及.apk反编译

 Intent对象的使用及.apk反编译 Jiangdg_VIP http://blog.csdn.net/u012637501 前三节主要学习了Intent对象的作用.属性以及不同Activity之间值的传递,这节将着重学习Intent对象的用法.在我的语音识别项目中,通过使用Inteng对象来启动应用内组件.系统应用程序以及第三方应用程序(如QQ.微信等). 一.Intent对象开发方法 首先,我们还是先学习下Intent对象启动组件(应用)有哪几种方法: 1.利用Intent对象的Comp

Intent对象(组件间的通信原理)

Intent对象是一种可以在运行时动态绑定组件的关键技术,通过使用Intent对象,可以告诉系统你想要实现什么样的操作,也就是Intent对象里面包含的请求内容,请求再由Android操作系统接收到,然后到IntentFilter过滤器中找到已经注册的组件,再调用这个组件就完成了组件间通信的过程. Intent对象描述的基本内容:1.componentName组件的名称: 2.Action动作名称: 3.Data数据:  4.Category类别: 5.Extra附加数据: 6.Flag标志位

Android Intent对象

Android应用有三个核心组件:activities.services.broadcast receivers.它们都是通过叫做intents的消息激活.Intent消息是一种同一或不同的应用中组件之间延迟运行时绑定的机制.intent是一个被动的数据结构保存一个将要执行的操作的抽象描述,或在广播的情况下,通常是某事已经发生且正在宣告. Intent分为显式inten和隐式intent. 显式intent:通过名字指定目标组件.通常用于应用程序内部消息,如一个活动启动从属的服务或启动一个姐妹活

Tab标签页接口---使用Intent对象

TabHost tabHost = getTabHost(); Intent it = new Intent(); it.setClass(Main.this, DateTimePicker.class); TabSpec spec=tabHost.newTabSpec("tab1"); spec.setContent(it); spec.setIndicator("ら戳㎝丁", getResources().getDrawable(android.R.drawa

wxGlade 布局中若干参数的含义

wxGlade是wxWidgets及wxPython的界面设计工具.其中有关布局的控件属性都在Layout属性页上设定,即当前控件在Sizer中用于定位的一些参数. 具体地wxglade参数: Position    :当前控件在Sizer中所处的位置,数字越小越靠前.proportion :这个属性现在在wxWidget中叫做,负责控制当前控件在当前Sizer中所占用的空间大小:如果取值为0时,当前控件多大,那么 Sizer中对应的格子也多大:如果取值为非零的值,那么该Sizer中所有取值大于