Android Intent 基本使用及对象构成

http://www.cnblogs.com/mengdd/archive/2013/03/18/2965839.html

Intent

Intent基本使用

  Intent可以理解为不同组件通信的媒介或者信使。

  Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast。

  具体方法如下表:


组件名称


方法名称


Activity


startActivity()

startActivityForResult()


Service


startService()

bindService()


Broadcasts


sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

1.启动Activity:

  向Context.startActivity() 或Activity.startActivityForResult()方法传递一个Intent对象,可以启动一个activity,或使得一个已经存在的activity去做一些新的事情。

  (也可以向 Activity.setResult() 去传递这个Intent对象,返回调用了startActivityForResult()的activity的一些信息。)

2.启动Service:

  向 Context.startService() 方法传递Intent对象可以初始化一个service或者向一个已经存在的service传递新的指令。

  类似的,向Context.bindService() 方法传递Intent对象可以在调用所在的组件和目标service之间建立一种连接。如果这个service并没有开始运行,则它可以初始化这个service。

3.发起广播Broadcast

  可以向下面的广播方法传递Intent对象来发起广播:

  Context.sendBroadcast(),Context.sendOrderedBroadcast(), 或 Context.sendStickyBroadcast()。系统会找到相应的广播接收者对此进行响应。

  

  Intent在寻找目标组件时有两种方法:

  第一种,显式调用,通过Component name直接指定;

  第二种,隐式调用,没有明确指定目标组件的名称,那么就要通过一定的条件过滤筛选。

  启动activity、service和broadcast的消息系统是没有任何重合的,即,一个要启动activity的Intent对象是绝对不会启动一个service的。

Intent对象构成

  Intent对象由以下六个部分组成:

  Component name

  Action

  Data

  Category

  Extras

  Flags

Component name

  Component name即组件名称,是要处理这个Intent对象的组件名称。

  组件名称对象由ComponentName类来封装,组件名称包含包名称类名称,被声明在AndroidManifest.xml文件中。

  组件名称通过 setComponent(),setClass(),setClassName()设置,通过getComponent()获取。

  需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。

Action

  Action是指Intent要完成的动作,是一个字符串常量。

  在Intent类里面定义了很多Action常量,其中有:

  Intent类中有很多预定义的常量,为了一些通常的动作;还有一些定义在Android API的其他地方。

  也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。

  Action在很大程度上决定了Intent的其他部分是如何构造的,尤其是 data 和 extras域。(就好像函数名会决定着参数值和返回值一样。)所以Action的名字应该尽可能具体,并且它们应该和Intent中的其他域紧密结合。

  使用 setAction() 和 getAction()来设置和读取Action属性。

Data

  Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。

  比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是 tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。

  当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。

  很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。

  数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()

Category

  Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。

  一个Intent对象中可以包含任意数量的category描述信息。

  Intent类中也定义了一些Category常量:

  与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。

Extras

  传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。就好像一些动作和特定的数据URI对应,一些动作和特定的extras对应。

  比如ACTION_TIMEZONE_CHANGED intent对象有一个 "time-zone"的extra来确认新的时区;

  ACTION_HEADSET_PLUG有一个"state" extra表示耳机是否插入,还有一个 "name" extra关于耳机类型;

  如果你要设计一个SHOW_COLOR动作,那么extra中应该包含颜色值。

  Intent对象有一系列的putXXX()函数用于放入各种数据类型,相应的也有一系列的getXXX()函数用于读取数据。

  实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。

Flags

  各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。

时间: 2024-10-12 13:20:13

Android Intent 基本使用及对象构成的相关文章

android intent 传递list或者对象

方法一: 如果单纯的传递List<String> 或者List<Integer>的话 就可以直接使用 Java代码 intent.putStringArrayListExtra(name, value) intent.putIntegerArrayListExtra(name, value) 方法二: 如果传递的是List<Object>,可以把list强转成Serializable类型,然后通过 Java代码  putExtras(key, (Serializable

Android intent传递list或对象

方法一: 如果单纯的传递List<String> 或者List<Integer>的话 就可以直接使用 Java代码 intent.putStringArrayListExtra(name, value) intent.putIntegerArrayListExtra(name, value) 方法二: 如果传递的是List<Object>,可以把list强转成Serializable类型,然后通过 Java代码  putExtras(key, (Serializable

关于 android Intent 传对象和对象数组的一些操作

关于 android Intent 传对象和对象数组的一些操作 分类: android GUI2013-10-10 00:47 2551人阅读 评论(5) 收藏 举报 androidintent传递对象传递对象数组 直接开正题,Intent传递值就是平常那些很简单的,接下来介绍传递 对象,和 对象数组 1 .intent 传递自定义的 对象 - 实体类继承  Serializable [java] view plaincopy [java] view plaincopy public class

Android Intent传递对象小结

效果: 想看实例的,感兴趣的可以看之前的一篇文章 Android ViewPager Fragment实现选项卡 部分关键代码: public class SerializeActivity extends Activity implements Serializable { Button btnlist, btnParcelable, btnSerialze; private final String TAG = "SerializeActivity"; public final s

在Android中通过Intent使用Bundle传递对象

IntentBundle传递对象SerializableParcelable Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法.被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable.两种序列化方式的区别:1.在使用内存的时候,Parcelable比Se

Android Intent传递对象和集合

Article article = JsonUtils.getArticle(content); intent = new Intent(activity, CompositionCorrect.class); Bundle bundle = new Bundle(); bundle.putSerializable("ARTICLE", article); intent.putExtras(bundle); startActivity(intent); 获取传递的对象 private

Android之Activity之间传递对象

在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢? Android支持两种传递对象的方式,一种是bundle.putSerializable方式,一种是bundle.putParcelable. 那么下面我们就用一个例子来实践Activity传递对象: 1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生.内容分别如下: <span style="font-size:1

Android Intent 意图作用

Intent分为两大类: (1)显性的(Explicit) (2)隐性的(Implicit) 对于隐性意图,在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的目的.(在模块间的组件启动) intent定位事件的目的地: (1)种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序. (2)类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目

Android Intent简介

Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据, 而针对这3大组件,有独立的Intent传输机制,分别如下:1.Activity:通过将一个Intent对象传递给Context.startActivity()或Activity.startActivityForResult(), 启动一个活动或者使用一个已经存在的活动去做新的事情.2.Service:通过将一个Intent对象传递给Content.start