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