欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中Intent用法总结

程序员文章站 2024-03-03 23:10:58
本文实例讲述了android开发中intent用法。分享给大家供大家参考,具体如下: android手机软件开发中,intent作为手机软件开发时很重要的对象需要引起我们...

本文实例讲述了android开发中intent用法。分享给大家供大家参考,具体如下:

android手机软件开发中,intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现android开发具有其独特性的一个标志性的对象。

当一个activity要启动另外一个activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动。这种方式简洁、明了,但是却违背了android开发的理念。android使用intent来"封装"程序的"调用意图",不管程序想启动什么组件,启动一个activity也好,一个service也好,或者一个broadcast receiver也好,android统一使用intent对象来封装这种"启动意图"。

除此之外,使用intent也有好处,某些时候,应用程序只是想启动具有某些特征的组件或者应用程序,却并不想和这类程序有硬性的代码耦合;另外,应用程序有时候或许只是知道要启动的东西的一些特征,并不知道要启动的程序具体指的是什么(比如,某程序想启动发短信的应用程序,而此时系统中存在多个发信息的软件,我们无法知道要打开什么软件),此时程序要做的就应该是发送一个启动短信应用程序的意图,而不是指定要打开什么软件。当然更一般的,intent也可以指定打开那个应用程序,而与一些程序有硬性的耦合关系。

intent还是应用程序组件之间通信的重要媒介,两个activity把需要交换的数据封装成bundle对象,然后使用intent来携带bundle对象,这样就实现了两个activity之间的数据交换。

intent存在以下几个属性:component,action,category,data,type,extra,flag七个属性,其中component属性用来指定需要启动的目标组件,extra属性用于携带需要交换的数据

下面对intent对象做详细的介绍:

1. intent的component属性

component是用来指定启动目标组件的属性,标准的启动代码如下:

componentname comp = new componentname(firstactivity.this,secondactivity.class);
intent intent = new intent();
intent. setcomponent(comp);
startactivity(intent);

以上代码用来标准的创建componentname对象,进而调用intent对象的setcomponent()函数来为intent设定相应的componentname,最后调用startacitvity函数启动一个新的activity。

实际上,当需要为intent设定component属性的时候,intent已经为我们提供了一个简单的构造器,使用方法如下(我们经常使用的方式):

复制代码 代码如下:
intent intent = new intent(firstactivity.this,senondactivity.class);

值得一提的是,在secondactivity组件中,可以使用getintent()方法取得调用次组件的intent对象,进而,getxxx方法在这里就可以各种使用了。

2. intent 的action与category属性

action和category属性都是普通的字符串,其中action代表了抽象出来的"动作",category属性用来和action属性配合使用,表达出要启动某组件的意图。

具有<intent-filter…/>标签的activity均有可能会被启动。

比如:

public final staticstring some_action = "org.someaction.some_action"
// 这是一个字符转,随便设定,但是一般都具有一些抽象的语义。
在这个activity种的某个按钮的onclick()方法中加入:
intent intent = newintent();
intent.setaction(thisactivity.some_action);
startactivity(intent);

这样的代码并没有具体指出要启动哪个activity,这样就脱离了"硬编码",但是具体要启动哪个activity呢,这将取决于activity配置文件中的<intent-filter…/>标签。

<intent-filter…/>是androidmanifest.xml文件中<activity…/>元素的子元素,需要做的,就是给你实际需要相应这个意图的activity添加<intent-filter…/>标签,在<intent-filter…/>下,存在着三种标签:1.<action…/>2.<category…/>3.<data…/>,其中指定android:name属性之后,这个activity便具有了相应上面意图的属性了。

对于上面的意图,则添加这样的代码(当然要在<intent-filter…/>标签下):

复制代码 代码如下:
<action android:name = "org.someaction.some_action"/>

需要一提的是:一个intent对象最多只能包含一个activity属性,程序调用setaction(stringstr)来设定action的属性值;而一个activity可以有多个category属性,程序可以调用addcategory(string str)来添加category属性。当程序创建intent的时候,创建的intent属性自动启动属性值为intent.category_default常量,其值为"android.intent.category.default",所以,在配置某个activity属性的时候<categoryandroid:name = "andrid.intent.category.default ">是可以添加到配置文件当中的。

实际上android内部提供了大量的标准的action和category常量。

总结如下:

action常量

对应的android:name 设定

简单说明

action_main

android.intent.action.main

应用程序入口

action_view

android.intent.action.view

显示指定数据

action_attach_data

android.intent.action.attach_data

指定某模块数据被附加的地方

action_edit

android.intent.action.edit

编辑指定数据

action_pick

android.intent.action.pick

从列表中选择某项并返回所选数据

action_chooser

android.intent.action.chooser

显示一个activity选择器

action_get_content

android.intent.action.get_content

让用户选择数据,并返回所选

action_dial

android.intent.action.dial

显示拨号面板

action_send

android.intent.action.send

直接发送数据

action_sendto

android.intent.action.sendto

直接发送消息

action_answer

android.intent.action.answer

应答电话

action_insert

android.intent.action.insert

插入数据

action_delete

android.intent.action.delete

删除数据

action_run

android.intent.action.run

运行数据

action_sync

android.intent.action.sync

执行数据同步

action_pick_activity

android.intent.action.pick_activity

用于选择activity

action_search

android.intent.action.search

执行搜索

action_web_search

android.intent.action. web_search

直径web搜索

action_ factory_test

android.intent.action.factory_test

工厂测试入口点

这里仅仅摘录一些,如果想了解全部的action,可以直接查看android的标准api中有关intent的说明部分。

3. intent中的data和type属性

采用几个例子来说明data的用法:

在一个button的onclick()方法中添加下面代码:

string data = http://3g.renren.com;
uri uri =uri.parse(data);
intent.setaction(intent.action_view);
intent.setdata(uri);
startactivity(intent);

此方法中将会使得按钮启动人人网。

当然一下代码是简便的写法:

uri myuri = uri.parse("http://3g.renren.com");
intent intent = new intent(intent.action_view,myuri);
startactivity(intent);

上面的为其更详细的设定方法。

4. intent的extra属性

intent属性通常用来用于在多个activity之间进行数据交换,intent的extra属性值应该是一个bundle对象,他可以输入多个key-value对,这样就可以通过intent在不同的activity之间进行相应的数据交换了。

intent提供的方法有如下几个:

putextra(bundledata)   getextras()
putxxx(stringkey xxx data)   getxxx(string key)
putserializable(stringkey, serializable data) 对应的有
getserializable(stringkey, serializable data)

在课件中已经给出了添加键值对的相关代码,这里就不在重复了。

总结:

android应用总是要借助intent来实现需要启动的某个组件,intent就是这种"启动意图"的封装形式,这种意图并没有和任何程序组件耦合,通过这种方式即可以很好的提供了程序的可扩展性和可维护性,其中<intent-filter/>的配置是程序组件最为重要的标签,最好借助eclipse进行相应标签的添加,因为一些空格之类的小错误常常导致一些异常,希望各位童鞋在使用时引起重视。

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android编程开发之sd卡操作方法汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。