馮金濤


摘要:智能手機正在成為新的測量記錄和計算處理工具。本文針對三個簡單測量問題(前方交會、單一導線和水準路線),研究基于Android智能手機平臺的程序設計方法,取得了一些經驗,成功編制出相關程序。
關鍵詞:測量;程序設計;Android系統;智能手機
中圖分類號:P209;TP311.1 文獻標志碼:A 文章編號:1674-9324(2017)16-0256-04
隨著時代發展和科技進步,智能手機已成為人們必備的日常生活用品,其應用范圍不斷擴大,可以服務于人們多方面的工作和生活需要。智能手機的核心是開放式的手機操作系統,使用者可根據需要安裝不同的軟件,從而提高了手機的可擴展性。目前主要的手機操作系統是Google公司推出的Android和蘋果公司的iOS,而Android系統由于開放源代碼,得到手機行業內眾多廠家和服務提供商的支持,占有絕大部分的市場份額。智能手機也可以應用于測量數據的記錄和處理工作,已有很多專家學者在此方面進行了研究和程序開發。測量人員以前曾經普遍使用各種專門的記錄手簿,利用計算器作輔助計算,這種手工作業方式的效率偏低。后來出現了面向工程技術人員使用的可編程計算器(例如SHARP PC—E500,CASIO fx—5800P等),可部分減少測量人員的數據記錄和處理工作,以及隨后出現的各種掌上電腦(PDA:Personal Digital Assistant),所有這些電子設備都需花費一定數量的資金購買并深入研究程序開發技巧。然而隨著智能手機的出現,這些可編程計算器或掌上電腦在測量工作中將逐漸被淘汰。由于智能手機用途廣泛,且已成為人們必備的日常生活用品,測量技術人員研究基于Android系統的測量程序開發技術,提升其使用價值,無疑是具有重要意義的。目前手機應用軟件市場可提供下載的各種程序眾多,但專用于測繪生產作業的卻很少,其中一個重要原因是廣大測繪技術人員還未掌握基于Android系統的測量程序設計方法。本文以三個簡單測量工作(前方交會、單一導線和水準路線)的計算程序開發為例,分析其中遇到的一些問題和解決方法,希望對相關技術人員有所幫助。
一、Android應用程序開發簡介
Android是Google公司發布的基于Linux內核的開源手機平臺,包括操作系統、中間件和各種應用軟件。中間件是指Google公司為Android應用程序開發而專門提供的各種函數庫和運行時環境,以及應用程序框架,程序員可以很方便地在此基礎上開發各種應用程序。Android應用程序開發類似于在Windows平臺上用Visual Studio集成開發環境作可視化編程,其工作過程可分為兩部分:GUI界面設計和編寫程序代碼。Android平臺的應用開發語言是Java,開發環境可以選用Eclipse+ADT或Android Studio,所有這些工具都可以從互聯網免費下載使用。Eclipse是IBM公司在2000年11月以開放源碼的授權和運作模式發布的,程序員可通過增加插件使其成為多種計算機語言(例如Java、C/C++、COBOL、PHP、Perl、Python等)的開發工具,作Android應用程序開發必須先下載并安裝ADT插件(Android Development Toolkits)。Eclipse提供了對多種平臺特性的支持,使用時間較長,擁有大量的用戶群,但Google公司為了方便開發者基于Android開發,在2013年首次推出Android Studio,并建議廣大Android開發者盡快放棄Eclipse+ADT的開發環境,改為使用Android Studio[1][2]。在開發環境中完成GUI界面設計和程序代碼輸入后,可通過Android虛擬設備(AVD:Android Virtual Device)測試運行。AVD的運行界面如同真實手機,但啟動較慢,為此可使用第三方提供的Genymotion工具代替[1,3]。程序員還可以將手機與計算機系統相連,直接用手機進行測試。已測試成功的程序即可在手機上安裝運行,投入使用。
五、程序設計的一些經驗
作者初學Android應用程序開發,在編程過程中也不可避免地遇到許多困難,經過反復測試終于一一解決。總結出如下一些經驗:
1.首先應根據具體問題,確定窗體界面的數量。以上的前方交會程序比較簡單,只有一個Activity,程序啟動后輸入有關數據,然后單擊命令按鈕即可獲得計算結果。單一導線和水準路線由于區分多種類型,需要分別提供窗體界面,使編程工作更加復雜。
2.由于手機屏幕尺寸有限,在界面設計時不宜使用太多的控件。以上三個程序在接收一系列的角度、距離或高差觀測值時,只采用一個編輯框控件,各數據依次錄入,彼此之間以逗號隔開。在程序代碼中調用split()方法可自動區分各觀測值,從而使界面簡潔,方便使用。這種方法還可用于區分點名和坐標(或高程)數據,從而在同一個編輯框中可以輸入已知點的完整信息(點名+該點的坐標或高程數據)。
3.Intent通常用于在一個窗體界面(MainActivity)中啟動另一個窗體界面(AcitivityToStart),這時應指明AcitivityToStart對應的類,即所謂Intent的“顯式調用”:
Intent intent=new Intent(MainActivity.this,ActivityToStart.class);
startActivity(intent);
但是由于單一導線和水準路線都區分多種類型,分別有各自的窗體界面,它們屬于不同的類,因此不能直接按照上述方法操作,否則系統會提示編譯錯誤。這時可以通過設置Component屬性來確定將啟動哪個窗體界面,從而解決這一問題。有關的代碼如下:
ComponentName comp=null;
switch(dxType){ // dxType表示導線類型,在選擇界面中指定
case 1: //選擇支導線
comp=new ComponentName(MainActivity.this,ZhiActivity.class); break;
case 2: //選擇閉合導線
comp=new ComponentName(MainActivity.this,BiheActivity.class); break;
case 3: //選擇附合導線
comp=new ComponentName(MainActivity.this,FuheActivity.class); break; }
Intent intent=new Intent();
intent.setComponent(comp);
MainActivity.this.startActivity(intent);
4.在單一導線的測量計算程序中,已知點和未知點都具有多種屬性(包括點名,x坐標和y坐標),因此應當開發相應的point類,將已知點和未知點都作為該類的對象進行創建,從而提高代碼的使用效率。水準路線的測量計算程序也有同樣的問題,可以同樣處理。
本文針對三個簡單測量問題(前方交會、單一導線和水準路線),研究基于Android智能手機平臺的測量程序設計方法,編制出相關程序,并在真實手機上測試成功。這些程序還可以作進一步的改進,例如增加容錯功能和異常處理機制,將計算結果以報表形式輸出等。智能手機的功能很多,以智能手機為平臺的Android應用程序開發也具有豐富的內容,學習Android應用程序開發應當首先學習Java編程語言[1]。另一方面,Android應用程序不僅用于智能手機,也可用于智能電視、游戲機和一些可穿戴的智能設備(例如手表和眼鏡),甚至用于汽車和機器人的控制系統設計,因此這項技術具有重大的應用價值,必然會激起更多學生和科技人員的興趣。
參考文獻:
[1]李剛.瘋狂Android講義(第3版)[M].北京:電子工業出版社,2015.
[2]尹孟征.基于Android的APP開發平臺綜述[J].通訊電源技術,2016,33(4).
[3]王向輝,張國印,沈潔.Android應用程序開發(第3版)[M].北京:清華大學出版社,2016.
[4]程效軍,鮑峰,顧孝烈.測量學(第五版)[M].上海:同濟大學出版社,2016.