摘要:让Android 应用程序中的Activity对象之间,以及应用程序之间实现功能上的协作,必须实现Activity对象之间的通信及应用程序之间的通信功能。Android是通过Intent技术实现以上功能,主要包括实现Activity对象之间的调用,数据的传递,数据的返回等功能。
关键词:ActivityIntent
1 引言
在一个Android APP中,可以有很多Activity对象,Android APP通过这些Activity对象实现其功能。那么,在同一个Android APP中或不同的Android APP中,如何实现下列问题:
1通过一个Activity启动其他Activity?
1.1Activity之间如何传送数据?
1.2Activity之间如何返回数据?
上述三个问题是本文主要阐述的内容。
2主要类对象
2.1 Activity对象
由Activity类的子类创建的对象称为Activity对象。Activity对象是Android APP程序结构的主要组成部分。一个Android应用程序可以包含一个或多个Activity对象,但必须有一个Activity对象为主要的Activity对象,主要的Activity对象是Android应用程序运行的入口。Android应用程序中的一个Activity对象可以请求加载它包含的其他的Activity对象。需要在应用程序的配置文件中注册每个Activity对象,即配置一个<activity>标记,如此应用程序才可以使用这个Activity对象。
2.2 Intent对象
Intent对象主要作用是封装意图和数据,程序寻找能够完成Intent对象封装的意图的Activity对象。如果只找到一个这样的Activty对象,就激活这个Activity对象;如果找到多个这样的Activity对象,就给出一个选择列表,让用户选择其中一个Activity对象,并激活所选择的Activity对象[1]。
3 Activity之间的调用
实现Activity之间的调用,首先,创建Intent对象,构造方法Intent(String action),参数action为动作类型。例如:Intent intent = new Intent(Intent.ACTION_DIAL);
其次,调用Activity的startActivity(Intent intent)方法,参数intent封装了意图和数据,程序将根据其意图找到所有的能实现该意图的Activity对象。
然后,配置配置文件,在配置文件AndroidManifest.xml中配置Activity的动作与范畴,例如,在配置文件中,注册的SubActivity对象配置的动作为android:name="android.intent. action. MAIN,配置的范畴为android:name="android.intent.category.LAUNCHER,android.intent.category. DEFAULT。
4Activity之间的数据传递和返回
Intent对象的封装的数据不是寻找Activity的条件,是传递给所找到的Activity对象的数据,被找到的Activity对象可以根据需要决定是否接收这些数据。
4.1 Intent封装数据方式一
Intent对象intent使用putExtra方法添加附加的数据,并为这个附加数据指定一个String类型的检索关键字。
期刊文章分类查询,尽在期刊图书馆例如,intent.putExtra("number1",125.12);被启动的Activity可以根据需要决定是否接收这些数据,获取方法是:
首先,得到启动当前Activity对象的Intent对象,Intent intent=getIntent();
其次,intent调用诸如getXXXExtra(关键字)的方法,通过关键字key得到想要的数据,例如,double number1 = intent.getDoubleExtra(“number1”,1.0);如果获取不到,就用默认值1.0。
4.2Intent封装数据方式二
Intent还可以使用Bundle类封装数据,具体使用步骤如下:
1)创建一个Boundle对象Bundle bundle = new Bundle();bundle对象调用诸如putXXX(关键字 key,数据 data)的方法将数据data放入bundle对象中,并为该数据指定一个String类型的检索关键字。例如,bundle.putDouble("number1",10.01);
2)intent对象使用putExtras(Bundle extras)方法将bundle对象放入当前intent对象中,如,intent. putExtras(bundle);取出数据被找到的Activity对象可以根据需要决定是否接收这些数据,取值方法是首先得到启动当前Activity的Intent对象:Intent intent=getIntent();
3)intent调用Bundle getExtras()的方法返回其中的boundle对象,如,Bundle bundle=intent. getExtras();
4)bundle对象诸如getXXX(String key,…)的方法,通过关键字key得到想要的数据:double pi =bundle.getDouble("number1",1.0);如果获取不到,就用默认值1.0。
5 Activity对象返回数据
应用程序有时候可能需要被启动Activity对象返回某些数据给启动它的Activity对象。需要使用
public void startActivityForResult(Intent intent,int requestCode)方法来启动其他的Activity对象。其中的参数requestCode应当是非负整数,否则该方法的作用等同于startActivity(Intent intent)。
如果参数requestCode取值是非负整数,表示当前Activity对象等待被启动的Activity对象返回数据给它。负责创建当前Activity对象的Activity的子类必须重写Activity类的void onActivity Result(int requestCode,int resultCode,Intent data)方法,通过该方法得到当前Activity对象启动的Activity对象返回的数据。
当前Activity对象使用startActivityForResult(Intent intent,int requestCode)方法启动另一个Activity对象后,等待调用onActivityResult()方法,此时,系统不会杀死当前的Activity对象。首先,被启动的Activity对象将要返回的数据作为附加数据存放到一个没有任何意图的Intent对象中。如,Intent returnIntent = new Intent(); returnIntent.putExtra("number1",10.1)。然后,为returnIntent指定一个int型的结果码(resultCode),setResult(100,backIntent)。最后,返回数据的Activity对象需调用finish方法结束自己的生命周期,等待返回数据的Activity对象则调用onActivityResult()方法处理返回的数据[3]。
6结束语
通过Intent对象不仅实现了程序内部或程序之间的Activity对象之间的通信,而且也实现了Activity对象之间数据的传递和返回,并通过Activity对象的动作和范畴的定义和配置,明确了程序中Activity对象功能和类别划分。
参考文献:
[1] 耿祥义.Android手机程序设计实用教程[M].清华大学出版社.2013.6
[2] 李宁.Android应用开发实战[M].第2版. 机械工业出版社.2013
[3] Dave Smith等. Android5.0开发范例代码大全[M].清华大学出版社.2015.9
作者简介:
黄继红(1977-),男,安徽六安人,硕士,讲师,主要研究方向:软件工程
基金项目:
安徽省高校优秀青年人才基金项目(2011SQRL151)
安徽省六安市委托产学研项目(2013LWA005)
论文作者:黄继红,汪淼
论文发表刊物:《电力设备》2017年第33期
论文发表时间:2018/4/17
标签:对象论文; 数据论文; 方法论文; 应用程序论文; 意图论文; 关键字论文; 程序论文; 《电力设备》2017年第33期论文;