当前位置: 代码迷 >> Android >> 小弟我的android 第27天 - Intent意图
  详细解决方案

小弟我的android 第27天 - Intent意图

热度:96   发布时间:2016-04-28 07:09:36.0
我的android 第27天 - Intent意图

我的android 第27天 - Intent意图?

?Intent(意图)?是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。intent主要是用来启动其他的activity?或者serviceBroadcastReceiver,所以可以将intent理解成组件之间的粘合剂。

一、intent?表现形式

??1.?通过Context.startActivity()\startActivityForResult()Activity

??2.?通过?Context.startService()?启动一个服务,或者通过

??????Context.bindService()?和后台服务交互;

??3.?通过广播方法(比如:Context.sendBroadcast()

????? ,Context.sendOrderedBroadcast(),?发给broadcast receivers

二、属性设置

??1.Action(动作)

???* 系统动作

????? ACTION_CALL,ACTION_EDIT,ACTION_VIEW,ACTION_BATTERY_LOW

???*?自定义动作

??????最好在前缀加包名(比如:cn.itcast.contact.SHOW_TEL

??2.Data(执行动作要操作的数据,数据用Uri表示)

??3.type(数据类型,显式指定Intent的数据类型(MIME)???

??

二、属性设置

??4.category(类别)

????*CATEGORY_DEFAULT

???????? *CATEGORY_BROWSABLE

???????? *CATEGORY_DEFAULT

???????? *CATEGORY_HOME

???????? *CATEGORY_LAUNCHER

??5.component(组件)指定目标组件的类名称

??6.extras(附加信息) 是所有附加信息的集合

三、显示意图与隐式意图

????? Intent可以划分成显式意图和隐式意图。

????? 1. 显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定

???????? 了组件名,显式意图明确指定了Intent应该传递给哪个组件。

????? 2.隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意

???????? 图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适

???????? 的组件来处理这个意图。

???四、intent-filter(意图过滤器)

?

五、Bundle介绍:

Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:

publicfinal class Bundle implements Parcelable, Cloneable {

??????????? ......

?Map<String, Object>?mMap;

?public Bundle() {

???????mMap?= new?HashMap<String, Object>();

??????? ...... }

?public void putString(String key, String value) {

??????mMap.put(key, value);

?}

publicString getString(String key) {

???????Object o =?mMap.get(key);

??????? return (String) o;

????????........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码

}?}

在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。

六、Intent附加数据的两种写法

???1. 第一种写法,用于批量添加数据到Intent:

Intentintent?=new Intent();

Bundlebundle?=new Bundle();//该类用作携带数据

bundle.putString("name","传智播客");

??????????intent.putExtras(bundle);//为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换

???2第二种写法:这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种

??????? 写法使用起来比较方便,而且只需要编写少量的代码。

Intentintent?=new Intent();

intent.putExtra("name","传智播客");

Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的putExtra(String name, String value)方法代码片断:

publicclass?Intentimplements?Parcelable {

privateBundle?mExtras;

public?Intent putExtra(String?name,?String?value) {

??????? if (mExtras == null) {

????????????mExtras?= newBundle()??}

????????mExtras.putString(name, value);

??????? return this;??}

?

下载视频代码

  相关解决方案