趙 健
(安徽省水利水電勘測設計院勘測分院,安徽 蚌埠 233000)
?
Android系統下的三、四等水準記錄軟件開發(fā)
趙健
(安徽省水利水電勘測設計院勘測分院,安徽 蚌埠233000)
摘要:隨著科學技術快速發(fā)展,雖然測量設備和測繪方法都發(fā)生較大的變化,但是水準記錄作為傳統的測量手段仍然具有不可替代的精準性,而其相關軟件的更新迭代也更容易被人們忽視。文章使用的PDA水準記錄軟件,在數據處理、資料打印及歸檔上已有一套成熟的方案,但是PDA設備已近淘汰,考慮到智能手機的高度普及和便攜性,開發(fā)了Android系統下的水準記錄軟件。關鍵詞:水準記錄軟件;Android系統;界面設計
1功能介紹
本軟件可對三、四等水準測量進行觀測數據記錄,四等水準路線中支持“單程雙轉點”模式。在數據錄入時,軟件將“監(jiān)聽”用戶的輸入行為,自動切換輸入焦點,并實時進行數據檢查,提示超限的讀數,同時可對奈鮑爾法i角檢驗數據進行檢查和記錄。在軟件編寫過程中著重考慮記錄員的操作體驗,如最大視距為100 m的情況下,當距離記錄到2位數,并且大于10的時候則自動將光標移到下一個輸入框,否則等待用戶繼續(xù)輸入。諸多類似這樣的設計將盡可能地減少記錄過程中的多余動作。
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ā)應用程序時調用的Java類庫。本文使用的是JDK 8 Update 60,安裝并為其配置環(huán)境變量即可。
(2) Android SDK(Software Development Kit)。它包含了模擬器、教程、API文檔和示例代碼等內容,為構建、調試Android應用程序提供了所需的開發(fā)工具。打開Android SDK安裝目錄下的SDK Manager,可以為不同版本的安卓系統下載對應的SDK包,以便于在各個不同平臺下進行調試。
(3) Eclipse和ADT插件。 Eclipse是Java應用程序及Android開發(fā)的IDE(集成開發(fā)環(huán)境),ADT(Android Development Tools)是Google專門為Eclipse定制的一個插件,用來將Eclipse和Android SDK關聯起來。
為了方便程序員對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安裝包列表內的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命名規(guī)則的文件名。創(chuàng)建后,R.java會自動收錄該布局資源。
(2) 在Activity中使用Java代碼實現XML文件中布局的內容:setContentView(R.layout.activity_welcom),在代碼中,activity_welcome是本軟件首頁面XML布局文件的文件名。
由于Android設備的分辨率和屏幕尺寸較為混亂,因此,有必要為不同分辨率的設備單獨編寫布局文件?,F在多數手機已經采用了1 920×1 080的分辨率,為了界面能夠正常顯示,需要在res目錄下新建一個layout-xxhdpi的文件夾,在里面為軟件的每個界面重新編寫XML布局文件。軟件運行時將根據手機的分辨率自動調用相應文件夾內的布局文件進行顯示[6-7]。
在本軟件部分代碼中布局了一個“選擇…”的按鈕和顯示文件路徑的可編輯文本框,如圖1所示。
圖1 軟件界面
3.2功能實現
在水準記錄過程中,為了提升用戶使用體驗,軟件需要對錄入的數據進行分析,并輔助用戶進行輸入焦點切換和超限提醒。以水準尺的后視紅面讀數為例,首先限定該文本框只能輸入整數,且長度為4個字符,然后監(jiān)聽這個文本框的字符變化,當其為4個字符(即已經輸入完畢)時將焦點切換到下一目標;然后再為該文本框添加一個焦點切換監(jiān)聽器,并在其內判斷讀數是否超限。以下為部分代碼:
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的“開始”按鈕單擊事件監(jiān)聽器中添加如下代碼:
Intent intent = new Intent(WelcomeActivity.this,DanChengActivity.class);
Bundle bundle=new Bundle();//--創(chuàng)建并實例化一個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].北京:電子工業(yè)出版社,2010.
[2]清宏計算機工作室.JAVA編程技巧[M].北京:機械工業(yè)出版社,2004.
[3]姚昱旻,劉衛(wèi)國.Android的架構與應用開發(fā)研究[J].計算機系統應用,2008,17(11):110-112.
[4]汪永松.Android平臺開發(fā)之旅[M].北京:機械工業(yè)出版社,2011.
[5]羅海濱,趙顯富.電子手簿在水準測量實踐教學中的應用研究[J].測繪科學,2012(6):187-188.
[6]王沖.J2ME開發(fā)平臺上XML解析器的選擇[J].計算機工程與應用,2003(31):133-135.
[7]GB/T 12898-2009,國家三、四等水準測量規(guī)范[S].
[8]陳煒,張曉蕾,侯燕萍,等.Java軟件開發(fā)技術[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