Android系统下的三、四等水准记录软件开发
2016-06-12赵健
赵 健
(安徽省水利水电勘测设计院勘测分院,安徽 蚌埠 233000)
Android系统下的三、四等水准记录软件开发
赵健
(安徽省水利水电勘测设计院勘测分院,安徽 蚌埠233000)
摘要:随着科学技术快速发展,虽然测量设备和测绘方法都发生较大的变化,但是水准记录作为传统的测量手段仍然具有不可替代的精准性,而其相关软件的更新迭代也更容易被人们忽视。文章使用的PDA水准记录软件,在数据处理、资料打印及归档上已有一套成熟的方案,但是PDA设备已近淘汰,考虑到智能手机的高度普及和便携性,开发了Android系统下的水准记录软件。关键词:水准记录软件;Android系统;界面设计
1功能介绍
本软件可对三、四等水准测量进行观测数据记录,四等水准路线中支持“单程双转点”模式。在数据录入时,软件将“监听”用户的输入行为,自动切换输入焦点,并实时进行数据检查,提示超限的读数,同时可对奈鲍尔法i角检验数据进行检查和记录。在软件编写过程中着重考虑记录员的操作体验,如最大视距为100 m的情况下,当距离记录到2位数,并且大于10的时候则自动将光标移到下一个输入框,否则等待用户继续输入。诸多类似这样的设计将尽可能地减少记录过程中的多余动作。
2环境搭建
在Android开发环境中,较常用的为Eclipse IDE,除此之外也可以使用IntelliJ IDEA。本文简单介绍Eclipse开发环境要素组成[1-4]。
(1) JDK(Java SE Development Kit)。也就是Java开发工具箱,它是Java的核心,包含了Java的运行环境(Java Runtime Environment),一堆Java工具和给开发者开发应用程序时调用的Java类库。本文使用的是JDK 8 Update 60,安装并为其配置环境变量即可。
(2) Android SDK(Software Development Kit)。它包含了模拟器、教程、API文档和示例代码等内容,为构建、调试Android应用程序提供了所需的开发工具。打开Android SDK安装目录下的SDK Manager,可以为不同版本的安卓系统下载对应的SDK包,以便于在各个不同平台下进行调试。
(3) Eclipse和ADT插件。 Eclipse是Java应用程序及Android开发的IDE(集成开发环境),ADT(Android Development Tools)是Google专门为Eclipse定制的一个插件,用来将Eclipse和Android SDK关联起来。
为了方便程序员对Android开发环境的配置,Google提供了一种集成式IDE:ADT-Bundle for Windows,它包含了上述除JDK以外的所有东西,直接解压然后更新下Android SDK即可使用。但是,更新SDK时,先在Eclipse-帮助-Install New Software-what is already installed中查看ADT版本,确保该版本和SDK Manager安装包列表内的Tools-Android SDK Tools 版本号一致,否则会有版本不匹配的提示;当Intel CPU支持VT虚拟技术时,可以在SDK Manager中下载Intel x86 Emulator Accelerator,以使用HAXM技术为模拟器加速[5]。
3界面及功能实现
3.1界面设计
Android提供了一种非常简单、方便的方法用于控制UI界面,该方法采用XML文件进行界面布局,从而将布局界面的代码和逻辑控制的Java代码分离开来,使程序的结构更加清晰、明了。
使用XML布局文件控制UI界面可以分为以下2个关键步骤:
(1) 在Android应用的reslayout目录下编写XML布局文件,可以采用任何符合Java命名规则的文件名。创建后,R.java会自动收录该布局资源。
(2) 在Activity中使用Java代码实现XML文件中布局的内容:setContentView(R.layout.activity_welcom),在代码中,activity_welcome是本软件首页面XML布局文件的文件名。
由于Android设备的分辨率和屏幕尺寸较为混乱,因此,有必要为不同分辨率的设备单独编写布局文件。现在多数手机已经采用了1 920×1 080的分辨率,为了界面能够正常显示,需要在res目录下新建一个layout-xxhdpi的文件夹,在里面为软件的每个界面重新编写XML布局文件。软件运行时将根据手机的分辨率自动调用相应文件夹内的布局文件进行显示[6-7]。
在本软件部分代码中布局了一个“选择…”的按钮和显示文件路径的可编辑文本框,如图1所示。
图1 软件界面
3.2功能实现
在水准记录过程中,为了提升用户使用体验,软件需要对录入的数据进行分析,并辅助用户进行输入焦点切换和超限提醒。以水准尺的后视红面读数为例,首先限定该文本框只能输入整数,且长度为4个字符,然后监听这个文本框的字符变化,当其为4个字符(即已经输入完毕)时将焦点切换到下一目标;然后再为该文本框添加一个焦点切换监听器,并在其内判断读数是否超限。以下为部分代码:
DhouHong.setOnFocusChangeListener(new OnFocusChangeListener() {
EditText DhouHei =(EditText)findViewById(R.id.DhouHei); //--后视黑面
EditText DqianHei =(EditText)findViewById(R.id.DqianHei);//--前视黑面
EditText DhouHong =(EditText)findViewById(R.id.DhouHong);//--后视红面
EditText DqianHong =(EditText)findViewById(R.id.DqianHong);//--前视红面
public void onFocusChange(View v, boolean hasFocus) {if(!TextUtils.isEmpty(DhouHei.getText())&&!TextUtils.isEmpty(DhouHong.getText()))//--后视读数不为空
{
double dblhouHei=Double.parseDouble(DhouHei.getText().toString());
double dblhouHong=Double.parseDouble(DhouHong.getText().toString());if((dblhouHei+hccs-dblhouHong)>chk30||(dblhouHong-dblhouHei-hccs)>chk30)
{
Toast.makeText(DanChengActivity.this, “中丝读数超限”,Toast.LENGTH_SHORT).show();
((EditText)findViewById(R.id.DhouHong)).setText("");
}else if(!TextUtils.isEmpty(DqianHei.getText())&&!TextUtils.isEmpty(DqianHong.getText()))
{
double dblqianHei=Double.parseDouble(DqianHei.getText().toString());
double dblqianHong=Double.parseDouble(DqianHong.getText().toString());
if((dblhouHei-dblqianHei-dblhouHong+dblqianHong)>(qccs-hccs+chk50)||(dblhouHei-dblqianHei-dblhouHong+dblqianHong)<(qccs-hccs-chk50))
{
Toast.makeText(DanChengActivity.this, “黑红面高差超限”,Toast.LENGTH_SHORT).show();
((EditText)findViewById(R.id.DhouHong)).setText("");
}
在Android中,Activity代表着手机屏幕的一屏,每个应用程序内可以有多个Activity,本软件中就有5个。当在一个Activity中启动另一个Activity时,经常需要传递一些数据。如用户选择好了水准等级,并填写好前、后尺常数等参数,点击“开始”按钮进行记录时,需要把这些信息“告诉”新打开的水准记录页面,以便进行数据检查。这时候就可以通过Intent来实现。因为Intent通常被称为是2个Activity之间的信使,通过将要传递的数据保存在Intent中,就可以将其传递到另一个Activity中[8-10]。
在Android中,可以先将要保存的数据存放在Bundle对象中,然后通过Intent提供的putExtras()方法将要携带的数据保存在Intent中。
具体步骤如下:
在WelcomeActivity.java的“开始”按钮单击事件监听器中添加如下代码:
Intent intent = new Intent(WelcomeActivity.this,DanChengActivity.class);
Bundle bundle=new Bundle();//--创建并实例化一个Bundle对象
bundle.putCharSequence("hccs", hccs); //--保存后尺常数
bundle.putCharSequence("qccs", qccs); //--保存前尺常数
bundle.putCharSequence("szdj", szdj); //--保存水准等级
bundle.putCharSequence("tq", tq); //--保存天气
bundle.putCharSequence("cx", cx); //--保存成像
intent.putExtras(bundle); //--将Bundle对象添加到Intent对象中
startActivity(intent); //--启动新的Activity
在DanChengAcitivity.java的onCreate()方法中添加如下代码:
Intent intent =getIntent();//--获取Intent对象
Bundle bundle=intent.getExtras();//--获取传递的数据包
String sthccs=bundle.getString("hccs");//--获取后尺常数
String stqccs=bundle.getString("qccs");//--获取前尺常数
hccs = Integer.parseInt(sthccs); //--将后尺常数转换为int类型
qccs = Integer.parseInt(stqccs); //--将前尺常数转换为int类型
String szdj=bundle.getString("szdj");//--获取水准等级
final String tq=bundle.getString("tq");//--获取天气
final String cx=bundle.getString("cx");//--获取成像
这样就实现了不同界面中数据的传递,如图2所示的软件操作界面。
图2 水准记录界面
4结束语
经测试和使用,本软件可方便快捷地进行水准数据记录,并可与本单位现有的平差软件进行无缝衔接,实现野外观测水准数据的资料处理和打印,解决了因旧设备老化和淘汰带来的软件更新迭带问题。
〔参考文献〕
[1]吴亚峰,索依娜.Android核心技术与实例讲解[M].北京:电子工业出版社,2010.
[2]清宏计算机工作室.JAVA编程技巧[M].北京:机械工业出版社,2004.
[3]姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008,17(11):110-112.
[4]汪永松.Android平台开发之旅[M].北京:机械工业出版社,2011.
[5]罗海滨,赵显富.电子手簿在水准测量实践教学中的应用研究[J].测绘科学,2012(6):187-188.
[6]王冲.J2ME开发平台上XML解析器的选择[J].计算机工程与应用,2003(31):133-135.
[7]GB/T 12898-2009,国家三、四等水准测量规范[S].
[8]陈炜,张晓蕾,侯燕萍,等.Java软件开发技术[M].北京:人民邮电出版社,2005.
[9]熊刚.基于Android的智能手机的设计与实现[D].武汉:武汉理工大学,2010.
[10]尤宝平,聂群.DiNi11/12电子水准仪及其使用[J].海洋测绘,2004(4):59-61.
收稿日期:2015-12-25;修改日期:2016-01-19
作者简介:赵健(1985-),男,安徽淮南人,安徽省水利水电勘测设计院勘测分院工程师.
中图分类号:TP311.5
文献标识码:A
文章编号:1673-5781(2016)01-0033-03