趙 健
(安徽省水利水電勘測設(shè)計院勘測分院,安徽 蚌埠 233000)
?
Android系統(tǒng)下的三、四等水準(zhǔn)記錄軟件開發(fā)
趙健
(安徽省水利水電勘測設(shè)計院勘測分院,安徽 蚌埠233000)
摘要:隨著科學(xué)技術(shù)快速發(fā)展,雖然測量設(shè)備和測繪方法都發(fā)生較大的變化,但是水準(zhǔn)記錄作為傳統(tǒng)的測量手段仍然具有不可替代的精準(zhǔn)性,而其相關(guān)軟件的更新迭代也更容易被人們忽視。文章使用的PDA水準(zhǔn)記錄軟件,在數(shù)據(jù)處理、資料打印及歸檔上已有一套成熟的方案,但是PDA設(shè)備已近淘汰,考慮到智能手機的高度普及和便攜性,開發(fā)了Android系統(tǒng)下的水準(zhǔn)記錄軟件。關(guān)鍵詞:水準(zhǔn)記錄軟件;Android系統(tǒng);界面設(shè)計
1功能介紹
本軟件可對三、四等水準(zhǔn)測量進行觀測數(shù)據(jù)記錄,四等水準(zhǔn)路線中支持“單程雙轉(zhuǎn)點”模式。在數(shù)據(jù)錄入時,軟件將“監(jiān)聽”用戶的輸入行為,自動切換輸入焦點,并實時進行數(shù)據(jù)檢查,提示超限的讀數(shù),同時可對奈鮑爾法i角檢驗數(shù)據(jù)進行檢查和記錄。在軟件編寫過程中著重考慮記錄員的操作體驗,如最大視距為100 m的情況下,當(dāng)距離記錄到2位數(shù),并且大于10的時候則自動將光標(biāo)移到下一個輸入框,否則等待用戶繼續(xù)輸入。諸多類似這樣的設(shè)計將盡可能地減少記錄過程中的多余動作。
2環(huán)境搭建
在Android開發(fā)環(huán)境中,較常用的為Eclipse IDE,除此之外也可以使用IntelliJ IDEA。本文簡單介紹Eclipse開發(fā)環(huán)境要素組成[1-4]。
(1) JDK(Java SE Development Kit)。也就是Java開發(fā)工具箱,它是Java的核心,包含了Java的運行環(huán)境(Java Runtime Environment),一堆Java工具和給開發(fā)者開發(fā)應(yīng)用程序時調(diào)用的Java類庫。本文使用的是JDK 8 Update 60,安裝并為其配置環(huán)境變量即可。
(2) Android SDK(Software Development Kit)。它包含了模擬器、教程、API文檔和示例代碼等內(nèi)容,為構(gòu)建、調(diào)試Android應(yīng)用程序提供了所需的開發(fā)工具。打開Android SDK安裝目錄下的SDK Manager,可以為不同版本的安卓系統(tǒng)下載對應(yīng)的SDK包,以便于在各個不同平臺下進行調(diào)試。
(3) Eclipse和ADT插件。 Eclipse是Java應(yīng)用程序及Android開發(fā)的IDE(集成開發(fā)環(huán)境),ADT(Android Development Tools)是Google專門為Eclipse定制的一個插件,用來將Eclipse和Android SDK關(guān)聯(lián)起來。
為了方便程序員對Android開發(fā)環(huán)境的配置,Google提供了一種集成式IDE:ADT-Bundle for Windows,它包含了上述除JDK以外的所有東西,直接解壓然后更新下Android SDK即可使用。但是,更新SDK時,先在Eclipse-幫助-Install New Software-what is already installed中查看ADT版本,確保該版本和SDK Manager安裝包列表內(nèi)的Tools-Android SDK Tools 版本號一致,否則會有版本不匹配的提示;當(dāng)Intel CPU支持VT虛擬技術(shù)時,可以在SDK Manager中下載Intel x86 Emulator Accelerator,以使用HAXM技術(shù)為模擬器加速[5]。
3界面及功能實現(xiàn)
3.1界面設(shè)計
Android提供了一種非常簡單、方便的方法用于控制UI界面,該方法采用XML文件進行界面布局,從而將布局界面的代碼和邏輯控制的Java代碼分離開來,使程序的結(jié)構(gòu)更加清晰、明了。
使用XML布局文件控制UI界面可以分為以下2個關(guān)鍵步驟:
(1) 在Android應(yīng)用的reslayout目錄下編寫XML布局文件,可以采用任何符合Java命名規(guī)則的文件名。創(chuàng)建后,R.java會自動收錄該布局資源。
(2) 在Activity中使用Java代碼實現(xiàn)XML文件中布局的內(nèi)容:setContentView(R.layout.activity_welcom),在代碼中,activity_welcome是本軟件首頁面XML布局文件的文件名。
由于Android設(shè)備的分辨率和屏幕尺寸較為混亂,因此,有必要為不同分辨率的設(shè)備單獨編寫布局文件。現(xiàn)在多數(shù)手機已經(jīng)采用了1 920×1 080的分辨率,為了界面能夠正常顯示,需要在res目錄下新建一個layout-xxhdpi的文件夾,在里面為軟件的每個界面重新編寫XML布局文件。軟件運行時將根據(jù)手機的分辨率自動調(diào)用相應(yīng)文件夾內(nèi)的布局文件進行顯示[6-7]。
在本軟件部分代碼中布局了一個“選擇…”的按鈕和顯示文件路徑的可編輯文本框,如圖1所示。

圖1 軟件界面
3.2功能實現(xiàn)
在水準(zhǔn)記錄過程中,為了提升用戶使用體驗,軟件需要對錄入的數(shù)據(jù)進行分析,并輔助用戶進行輸入焦點切換和超限提醒。以水準(zhǔn)尺的后視紅面讀數(shù)為例,首先限定該文本框只能輸入整數(shù),且長度為4個字符,然后監(jiān)聽這個文本框的字符變化,當(dāng)其為4個字符(即已經(jīng)輸入完畢)時將焦點切換到下一目標(biāo);然后再為該文本框添加一個焦點切換監(jiān)聽器,并在其內(nèi)判斷讀數(shù)是否超限。以下為部分代碼:
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()))//--后視讀數(shù)不為空
{
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, “中絲讀數(shù)超限”,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代表著手機屏幕的一屏,每個應(yīng)用程序內(nèi)可以有多個Activity,本軟件中就有5個。當(dāng)在一個Activity中啟動另一個Activity時,經(jīng)常需要傳遞一些數(shù)據(jù)。如用戶選擇好了水準(zhǔn)等級,并填寫好前、后尺常數(shù)等參數(shù),點擊“開始”按鈕進行記錄時,需要把這些信息“告訴”新打開的水準(zhǔn)記錄頁面,以便進行數(shù)據(jù)檢查。這時候就可以通過Intent來實現(xiàn)。因為Intent通常被稱為是2個Activity之間的信使,通過將要傳遞的數(shù)據(jù)保存在Intent中,就可以將其傳遞到另一個Activity中[8-10]。
在Android中,可以先將要保存的數(shù)據(jù)存放在Bundle對象中,然后通過Intent提供的putExtras()方法將要攜帶的數(shù)據(jù)保存在Intent中。
具體步驟如下:
在WelcomeActivity.java的“開始”按鈕單擊事件監(jiān)聽器中添加如下代碼:
Intent intent = new Intent(WelcomeActivity.this,DanChengActivity.class);
Bundle bundle=new Bundle();//--創(chuàng)建并實例化一個Bundle對象
bundle.putCharSequence("hccs", hccs); //--保存后尺常數(shù)
bundle.putCharSequence("qccs", qccs); //--保存前尺常數(shù)
bundle.putCharSequence("szdj", szdj); //--保存水準(zhǔn)等級
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();//--獲取傳遞的數(shù)據(jù)包
String sthccs=bundle.getString("hccs");//--獲取后尺常數(shù)
String stqccs=bundle.getString("qccs");//--獲取前尺常數(shù)
hccs = Integer.parseInt(sthccs); //--將后尺常數(shù)轉(zhuǎn)換為int類型
qccs = Integer.parseInt(stqccs); //--將前尺常數(shù)轉(zhuǎn)換為int類型
String szdj=bundle.getString("szdj");//--獲取水準(zhǔn)等級
final String tq=bundle.getString("tq");//--獲取天氣
final String cx=bundle.getString("cx");//--獲取成像
這樣就實現(xiàn)了不同界面中數(shù)據(jù)的傳遞,如圖2所示的軟件操作界面。

圖2 水準(zhǔn)記錄界面
4結(jié)束語
經(jīng)測試和使用,本軟件可方便快捷地進行水準(zhǔn)數(shù)據(jù)記錄,并可與本單位現(xiàn)有的平差軟件進行無縫銜接,實現(xiàn)野外觀測水準(zhǔn)數(shù)據(jù)的資料處理和打印,解決了因舊設(shè)備老化和淘汰帶來的軟件更新迭帶問題。
〔參考文獻〕
[1]吳亞峰,索依娜.Android核心技術(shù)與實例講解[M].北京:電子工業(yè)出版社,2010.
[2]清宏計算機工作室.JAVA編程技巧[M].北京:機械工業(yè)出版社,2004.
[3]姚昱旻,劉衛(wèi)國.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].計算機系統(tǒng)應(yīng)用,2008,17(11):110-112.
[4]汪永松.Android平臺開發(fā)之旅[M].北京:機械工業(yè)出版社,2011.
[5]羅海濱,趙顯富.電子手簿在水準(zhǔn)測量實踐教學(xué)中的應(yīng)用研究[J].測繪科學(xué),2012(6):187-188.
[6]王沖.J2ME開發(fā)平臺上XML解析器的選擇[J].計算機工程與應(yīng)用,2003(31):133-135.
[7]GB/T 12898-2009,國家三、四等水準(zhǔn)測量規(guī)范[S].
[8]陳煒,張曉蕾,侯燕萍,等.Java軟件開發(fā)技術(shù)[M].北京:人民郵電出版社,2005.
[9]熊剛.基于Android的智能手機的設(shè)計與實現(xiàn)[D].武漢:武漢理工大學(xué),2010.
[10]尤寶平,聶群.DiNi11/12電子水準(zhǔn)儀及其使用[J].海洋測繪,2004(4):59-61.
收稿日期:2015-12-25;修改日期:2016-01-19
作者簡介:趙健(1985-),男,安徽淮南人,安徽省水利水電勘測設(shè)計院勘測分院工程師.
中圖分類號:TP311.5
文獻標(biāo)識碼:A
文章編號:1673-5781(2016)01-0033-03