周立新 郝耀峰 龐鈺寧 陳思兵 朱琳
摘要:針對點位勘察時對勘察過程和勘察要素的信息化管理需求,設計了一套基于安卓平臺的便攜式點位勘察系統。從系統總體架構和功能構成進行了描述,對系統軟件具體實現過程中涉及到的關鍵技術進行了研究,重點包括標簽導航的界面框架、布局動態加載、LitePal數據持久化和第三方應用集成4個方面。應用結果表明,該系統具有操作便捷、通用性強和擴展性好等特點,對類似的應用開發具有較好的參考價值。
關鍵詞:安卓平臺;勘察系統;動態加載;標簽導航;數據持久化
中圖分類號:TP23文獻標志碼:A文章編號:1008-1739(2020)20-63-4

點位勘察是測控選址的一項重要工作,根據選點要求,勘察實施一般要考慮避雷接地、設備布局、光纖通信、電磁環境、食宿保障、地理遮擋及場坪標校等要素。整個勘察工作的流程一般包括擬制勘察計劃、準備相關器材、實地點位勘察和形成勘察報告4個過程。點位勘察過程的規范化和程序化對于勘察工作的具體實施具有指導意義,也更易于利用信息化工具實現勘察過程的信息化管理。本文研究的背景是在已形成的堪點規范的指導下,研究利用信息化手段實現對堪點過程和堪點要素的信息化管理。由于安卓系統具有開放性以及便捷性等特點[1-3],具有安卓系統的便捷式電子設備體積小、重量輕且具備多個傳感器,滿足便攜式測量和信息管理的需求,因此本文研究基于安卓平臺的便攜式點位勘察系統,對系統設計和實現的難點和關鍵技術進行了研究[4-5]。
1.1系統總體架構
系統硬件部分包括電子設備傳感器(GPS接收器、加速度傳感器、磁傳感器、氣壓傳感器、重力傳感器等)和便攜式測量工具(激光測距儀器、全站儀、水平儀、卡片機、米尺等),主要進行實地點位信息采集;軟件部分采用SQLite數據庫+安卓平臺開發的方式,主要用于將采集到的信息進行存儲、統計和顯示,并能夠對硬件傳感器信息通過軟件實現電子測量功能,系統總體架構如圖1所示。

1.2系統功能結構
系統功能主要包括基礎數據采集、數據存儲統計和展示、基于地圖服務的線路規劃導航、堪點流程的展示和勘察常用工具箱等功能,如圖2所示。其中基礎數據的采集主要實現各類傳感器和便攜式測量工具對實地點位勘察數據的采集;數據的存儲統計和顯示功能主要完成對采集到的點位信息(包括場坪情況、標校情況、環境情況等)進行存儲(包括增刪改查)、統計和顯示;基于地圖服務的線路規劃導航功能主要實現堪點線路規劃、交通查詢導航等;堪點流程展示功能主要實現對堪察過程和勘察要素的可視化顯示,可方便人員對關鍵要素進行查詢;勘察常用工具箱主要包括:坐標轉換、經緯高度測量、指南針工具、水平儀工具、放大鏡工具、溫濕壓測量及電子鉛垂等,主要用來輔助進行點位勘察。

系統App實現過程中涉及到的關鍵技術包括標簽導航的界面框架設計、布局動態加載技術、第三方應用集成技術和LitePal數據持久化技術。
2.1標簽導航的界面框架
為了對軟件眾多功能模塊進行層次化管理和快速訪問,設計了基于標簽導航的界面框架,如圖3所示。

頂部顯示頁面標題,中間顯示頁面內容,底部通過導航標簽進行跳轉。實現的關鍵步驟如下:
(1)頁面布局設計
外層布局采用LineLayout;內部布局采用LineLayout,其中標題采用線性布局+TextView,內容模塊采用幀布局,底部采用線性布局+RadioButton。
(2)主頁面框架設計
通過RadionButton實現標簽導航時,要區分選中和非選中狀態,此時可通過設置選擇器來實現。建立選擇器selector,item屬性為“state_checked”,當“state_checked”設置為false時采用非選中圖片,當“state_checked”設置為true時采用選中圖片。關鍵實現代碼如圖4所示。

(3)各子頁面設計
子頁面的實現采用安卓提供的Fragment機制,主要包括以下幾個關鍵步驟:①創建BaseFragment;②定義各個子頁面;③初始化Fragment;④設置RadioGroup的監聽;⑤得到Fragment;⑥切換Fragment。
需要注意的是,當出現橫豎屏切換時會導致Activity生命周期重新執行,進而導致程序崩潰,解決的辦法是在AndroidManifest.xml文件中將主頁面MainActivity的配置中“configChanges”的屬性設置為"orientation|screenSize|keyboard Hidden"。
(4)子頁面Fragment功能的實現
根據頁面顯示功能需求,對頁面布局進行設計,并對功能進行程序實現。
2.2布局動態加載
在系統軟件實現上需要兼顧手機、平板等多終端、不同尺寸的屏幕,因此對軟件的主頁面進行了專門設計,在不重新編譯的情況下,軟件可以同時自適應多終端。本系統為小尺寸設計的單頁布局如圖5所示(適用于手機),為大尺寸屏幕設計的雙頁布局如圖6所示(適用于平板)。

在軟件啟動時,系統會根據終端屏幕的尺寸大小自動選擇加載顯示布局,在軟件實現上采用Fragment+Qualifiers技術實現。通過Fragment實現各子功能頁面,各子功能實現類繼承自Fragment,并重寫onCreateView()方法,同時在此方法中,通過LayoutInflater的inflate()方法加載子功能的頁面布局文件。
在子功能頁面內,分別單獨設計手機和平板的界面,手機界面布局放置在layout文件夾下,平板界面布局放置在layout-sw600dp文件夾下,在子功能頁面啟動時通過屏幕大小自動選擇加載不同界面,采用了一種安卓提供的最小寬度Qualifiers(限定符)技術,最小限定符允許對屏幕的寬度指定一個最小值(以dp為單位),然后以這個最小值(600 dp)為臨界點,屏幕寬度大于這個值就加載layout-sw600dp文件夾下的布局,屏幕寬度小于這個值的設備就加載layout文件夾下的布局。Android中常見的限定符如表1所示[6]。

2.3 LitePal數據持久化
數據庫的存儲訪問采用LitePal技術,LitePal是一款開源的Android數據庫框架,采用ORM模式將數據庫中最常用到的增、刪、改、查功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種常用操作。基于LitePal的數據庫操作使用包括以下幾個關鍵要點。
(1)配置LitePal
①在app/build.gradle文件中加入開源庫的引用。在dependencies中加入引用“implementation org.litepal.android: java:3.0.0”;②在工程中的assets目錄中建立litepal.xml文件并對數據庫名稱dbname和版本號version屬性值進行配置;③在AndroidManifest.xml文件
(2)數據庫操作
①創建更新數據庫:創建好映射對象后通過LitePal. getDatabase()對數據庫進行創建。在需要對數據庫表中字段進行修改或添加時,只需要對映射對象類進行添加或修改,同時對版本號加1就可實現對數據表的更新。
②數據添加:使用LitePal添加數據時需要將對象進行實例化并設置屬性,然后調用save函數。
③數據更新:使用LitePal更新數據有3種方式,第1種是先通過LitePal.find()對需要修改的數據進行查詢,然后設置其屬性,并調用save()函數;第2種方式是通過新建類的對象并設置其屬性,再調用對象的update(id)函數,根據數據的ID號進行更新;第3種方式是通過新建對象并創建其屬性,再調用updateAll()函數,可以在函數中設置查詢條件。
④數據刪除:使用LitePal刪除數據有2種方式,一種是通過直接調用LitePal.delete(類名,ID)根據ID號進行操作;另一種是通過調用LitePal.deleteAll(類名,查詢條件)根據查詢條件進行刪除。
⑤數據查詢:使用LitePal查詢數據有3種方式,一種是調用LitePal.find(類名,ID)根據ID號進行查詢;第2種方式是通過調用LitePal.findAll(查詢)可以查詢所有內容;第3種是通過調用LitePal.where(查詢條件).order(排序方式).find(類名)來實現。
2.4第三方應用功能集成
在系統實現過程中集成了第三方成熟的應用,包括百度地圖應用、常用工具等,其中涉及到2種關鍵實現方式,一種是直接使用第三方提供的集成應用SDK,比如百度SDK,在實現時只要遵循其開發應用規范,就可輕松訪問其提供的服務和數據,構建功能豐富、交互性強的應用程序。另一種是將已安裝的應用程序功能集成到系統應用中,通過應用程序包名,以及Activity或Service名稱調用應用程序功能,實現的關鍵代碼如圖7所示。

軟件啟動時會根據當前屏幕尺寸自動選擇加載不同的布局界面,在平板客戶端的運行主界面如圖8所示,在手機客戶端的運行主界面如圖9所示,平板客戶端左側采用瀑布流的方式對勘察過程和要素進行組織,當選擇左側圖片按鈕后,需要顯示的內容在右側進行顯示,當需要對數據庫內容進行操作時,通過右側指示按鈕進入訪問;手機客戶端由于屏幕較窄,只采用瀑布流方式對勘察內容按時縱軸進行組織,需要訪問的內容通過二級導航進行訪問。
通過在點位勘察過程中的實際應用表明,該系統能夠較大地提高勘察過程的有序管理,所提供的輔助工具對勘察實施具有很強的實用性,提高了勘察效率。

本文對基于安卓的點位勘察系統展開研究,對軟件實現過程中涉及到的主要技術難點進行總結,并對具體實現細節進行描述,提到的技術框架和實現技術具有功能模塊組織層次清晰、功能結構可擴展性好、數據存儲訪問便捷及屏幕大小適應性強等特點。通過具體的應用實踐證明,系統所實現的安卓應用在操作使用、功能維護、模塊擴展等方面具有良好的效果,而且軟件框架和實現代碼具有較好的可移植性,對于其他開發者研發此類系統具有很好的參考價值。
參考文獻
[1]楊剛,王曼,屈勝年.基于Android的老人遠程定位監護系統設計與實現[J].計算機與數字工程,2018, 46(5):1033-1037.
[2]劉馬飛.基于Android的車胎監測系統軟件的設計與實現[J].計算機測量與控制,2019,27(8):120-124,129.
[3]楊玲,朱江,程勇,等.基于安卓的無線體征信息監測系統設計與實現[J].電子測量技術,2015,38(9):121-124.
[4]張文嘉,陳齊康,郭斌,等.BLE智能鎖的Android設計與實現[J].工業控制計算機,2018,31(3):111-112,115.
[5]丁煒,劉恒,廖成旺.基于Android的微震適時監測系統設計與實現[J].計算機工程與應用,2018,54(17):266-270.
[6]郭霖.第一行代碼[M].北京:人民郵電出版社,2016.