朱光藝 姜宏
【摘要】本文將Android平臺與電梯檢測相結(jié)合,實(shí)現(xiàn)了在電梯檢測現(xiàn)場進(jìn)行數(shù)據(jù)錄入、編輯及傳輸功能;實(shí)現(xiàn)了Android手機(jī)對檢測數(shù)據(jù)進(jìn)行處理,完成數(shù)據(jù)的增刪改查及發(fā)送操作功能;利用手機(jī)終端中無線網(wǎng)絡(luò)發(fā)送功能,分別開發(fā)并實(shí)現(xiàn)通過無線、有線及藍(lán)牙等方式將電梯檢測數(shù)據(jù)發(fā)送至服務(wù)器端的功能,提高了電梯檢測的效率。
【關(guān)鍵詞】數(shù)據(jù)處理;無線網(wǎng)絡(luò);電梯檢測;安卓
0引言
隨著城市發(fā)展,截至2011年底,全國在用電梯總數(shù)達(dá)到201萬臺,并以每年20%左右的速度增長,目前我國電梯保有量、年產(chǎn)量、年增長量均列世界第一[1]。與此同時,龐大的電梯數(shù)量必然造成電梯安全檢測工作量的大幅增加。目前,很多電梯安全檢測工作仍在使用手工抄錄的方式完成數(shù)據(jù)錄入和處理,這使得數(shù)據(jù)易丟失,數(shù)據(jù)傳送不及時,造成電梯不能及時維修,對使用者人身安全造成了巨大的威脅。面對電梯檢測領(lǐng)域內(nèi)檢測數(shù)據(jù)量大,數(shù)據(jù)處理效率低這一突出問題,運(yùn)用移動通訊技術(shù)開發(fā)專用的數(shù)據(jù)處理系統(tǒng)十分必要。
1系統(tǒng)構(gòu)成及運(yùn)行環(huán)境
根據(jù)國家《電梯監(jiān)督檢驗(yàn)和定期檢驗(yàn)規(guī)則》[2]等標(biāo)準(zhǔn),在對電梯檢測部門需求分析的基礎(chǔ)上,電梯檢測數(shù)據(jù)處理系統(tǒng)以Android為平臺,使用SQLite數(shù)據(jù)庫,分別運(yùn)用xml和java語言完成系統(tǒng)界面和數(shù)據(jù)處理功能的實(shí)現(xiàn)。本系統(tǒng)設(shè)計(jì)并開發(fā)了數(shù)據(jù)存儲模塊、數(shù)據(jù)編輯模塊和數(shù)據(jù)傳輸模塊。
考慮到電梯檢測現(xiàn)場對數(shù)據(jù)傳輸?shù)囊?,分別開發(fā)了遠(yuǎn)程無線網(wǎng)絡(luò)傳輸模式、近距離藍(lán)牙傳輸模式以及USB傳輸模式。系統(tǒng)結(jié)構(gòu)如圖1所示:
圖1電梯檢測系統(tǒng)架構(gòu)
2相關(guān)開發(fā)技術(shù)
2.1Android
Android[3]一詞本義指“機(jī)器人”,是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要適用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
Android的系統(tǒng)架構(gòu)和其他操作系統(tǒng)一樣,采用了分層的架構(gòu),Android分為4層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序架構(gòu)層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層[4]。
2.2SQLite 數(shù)據(jù)庫
SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百k的內(nèi)存。該數(shù)據(jù)庫能夠支持Windows/Linux/Unix等主流的操作系統(tǒng),具有ODBC接口,同時能夠跟C#、PHP、Java等很多程序語言相結(jié)合,與Mysql、PostgreSQL這兩款開源數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度更快。
3功能模塊設(shè)計(jì)與實(shí)現(xiàn)[5-8]
電梯檢測數(shù)據(jù)處理系統(tǒng),利用Android技術(shù),在MyEclipse軟件平臺上開發(fā),本系統(tǒng)所開發(fā)的主要功能模塊有:用戶注冊模塊、系統(tǒng)查詢模塊、系統(tǒng)檢測數(shù)據(jù)處理模塊和信息發(fā)送模塊。
3.1用戶界面模塊
用戶界面作為系統(tǒng)體現(xiàn)友好的人機(jī)交互接口,本系統(tǒng)使用了JSP頁面來實(shí)現(xiàn),其用戶界面包括:主界面、功能界面、用戶信息管理界面等。
3.2登錄注冊模塊
用戶登入系統(tǒng)后,首先對用戶是否首次登錄判斷,根據(jù)結(jié)果對應(yīng)完成注冊操作和使用用戶名及密碼登錄操作。本系統(tǒng)可以通過用戶名將密碼查詢出來與輸入的密碼相匹配,密碼區(qū)分大小寫。
3.2.1模塊開發(fā)
考慮到系統(tǒng)的安全性,首先要求輸入密碼兩次,并將兩次輸入的密碼相比較,看是否一致;其次驗(yàn)證信息,輸入身份證號的后6位,以保證密碼丟失時找回密碼,也提高了密碼的安全性。通過用戶輸入的數(shù)據(jù)將信息插入到SQLite數(shù)據(jù)庫中。如果非首次登錄已注冊過用戶,根據(jù)用戶注冊時設(shè)定好的用戶名及密碼進(jìn)行登錄。
3.2.2模塊應(yīng)用
系統(tǒng)注冊模塊主要是將初次登入系統(tǒng)的用戶信息保存在數(shù)據(jù)庫中,方便對各用戶的管理。系統(tǒng)登錄模塊是通過調(diào)用用戶注冊過程中保存在數(shù)據(jù)庫中的用戶名和密碼,通過與輸入信息的比對來完成后續(xù)操作,合法用戶會允許登錄,非法用戶將被攔截。
3.3系統(tǒng)查詢模塊
需先選擇需要查詢的檢測日期及設(shè)備注冊碼,若有該信息,則會顯示出已保存的表,若沒有,則會提示沒有記錄。
3.3.1模塊開發(fā)
電梯檢測數(shù)據(jù)處理系統(tǒng)查詢模塊的定義和頁面布局方法如下所示:
android:id="@+id/query_datePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> android:layout_height="wrap_content" android:layout_width="fill_parent" android:stretchColumns="1" android:layout_marginTop="10sp" > 3.3.2模塊的應(yīng)用 查詢模塊在系統(tǒng)中主要運(yùn)用于數(shù)據(jù)庫中信息的搜尋。 3.4系統(tǒng)檢測數(shù)據(jù)處理模塊 系統(tǒng)檢測數(shù)據(jù)處理模塊作為系統(tǒng)性能檢測數(shù)據(jù)的處理核心,在整個設(shè)計(jì)過程中決定性的作用。 3.4.1模塊開發(fā) 系統(tǒng)檢測數(shù)據(jù)處理模塊主要對測試獲取的數(shù)據(jù)進(jìn)行處理,然后根據(jù)檢測的要求生成一個完整的電梯檢測報(bào)告,報(bào)告的內(nèi)容包括制造單位、用戶設(shè)備編號等信息。在不同的處理界面可以完成編輯、重置、退出、發(fā)送等操作,如圖2所示。 3.4.2模塊的應(yīng)用 系統(tǒng)檢測模塊設(shè)計(jì)過程 3.5信息發(fā)送模塊 信息發(fā)送過程中主要通過三種形式實(shí)現(xiàn):①無線發(fā)送;②藍(lán)牙發(fā)送;③有線發(fā)送。 3.5.1模塊的開發(fā) (1)無線發(fā)送 先判斷網(wǎng)絡(luò)是否連接,若無連接,調(diào)用系統(tǒng)網(wǎng)絡(luò)連接界面,連接網(wǎng)絡(luò),網(wǎng)絡(luò)連接上后將文件發(fā)送給服務(wù)器。 (a)檢測報(bào)告(b)檢測詳情 圖2系統(tǒng)檢測頁面 NetworkInfo network=conManager.getActiveNetworkInfo();//判斷是否有網(wǎng)絡(luò)資源 bisConnFlag=conManager.getActiveNetworkInfo().isAvailable();//判斷網(wǎng)絡(luò)是否已開啟 intent=new Intent(Settings.ACTION_WIRELESS_SETTINGS); //調(diào)用系統(tǒng)開啟網(wǎng)絡(luò)界面 Socket socket = new Socket(InetAddress.getByName(url.getHost()), port); //連接服務(wù)器端 OutputStream outStream = socket.getOutputStream();//發(fā)送文件 byte[] buffer = new byte[1024]; int len = 0; while ((len = uploadFile.getInStream().read(buffer, 0, 1024)) != -1) {outStream.write(buffer, 0, len); } (2)藍(lán)牙發(fā)送 先判斷藍(lán)牙是否開啟,開啟藍(lán)牙后彈出是否將藍(lán)牙可視的窗口,進(jìn)入文件選擇界面,點(diǎn)擊要發(fā)送的藍(lán)牙設(shè)備,完成文件發(fā)送。
bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();//判斷是否有藍(lán)牙設(shè)備
bluetoothAdapter.isEnabled()//判斷藍(lán)牙是否開啟
Intent disconverableIntent=New Intent (BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); //開啟藍(lán)牙是否可見
startActivity(disconverableIntent);
intent.setAction(Intent.ACTION_SEND); //進(jìn)入文件發(fā)送界面
intent.setClassName("com.android.bluetooth"
"com.android.bluetooth.opp.BluetoothOppLauncherActivity");
startActivity(intent);
(3)有線發(fā)送
有線發(fā)送即將數(shù)據(jù)保存至sdcard中指定文件中,通過USB方式將數(shù)據(jù)輸入服務(wù)器端。
//saveFilePath:保存文件的路徑
File dir_name = new File(saveFilePath);
//判斷路徑是否存在,若不存在,新建文件夾路徑
if(!dir_name.getParentFile().exists())
{dir_name.getParentFile().mkdirs();}
dir_name.createNewFile();//在指定的文件夾中創(chuàng)建文件
fw = new FileWriter(saveFilePath, true); // 創(chuàng)建FileWriter對象,用來寫入字符流
bw = new BufferedWriter(fw); // 緩沖對文件的輸出
//content:存儲文件的數(shù)據(jù);將數(shù)據(jù)寫入到指定的文件中
bw.write(content);
3.5.2模塊的應(yīng)用
信息發(fā)送模塊的設(shè)計(jì)如圖3所示:
(a)發(fā)送方式 (b)設(shè)備選擇
圖3信息發(fā)送模塊
4結(jié)論
隨著社會需求的不斷提高,傳統(tǒng)電梯檢測數(shù)據(jù)處理方式已經(jīng)不適應(yīng)用戶的要求。將移動通訊技術(shù)和智能終端設(shè)備應(yīng)用到電梯檢測數(shù)據(jù)處理工作中,能夠有效地解決電梯數(shù)量爆發(fā)式增長與低效檢測工作之間的矛盾。
因此,基于Android的電梯檢測數(shù)據(jù)處理系統(tǒng)具有非?,F(xiàn)實(shí)的經(jīng)濟(jì)和社會意義,本系統(tǒng)的開發(fā)和應(yīng)用對于專業(yè)檢測部門開展移動便攜式檢測具有重要的參考價值。
【參考文獻(xiàn)】
[1]http://news.cnwest.com/content/2013-03/06/content_8642156.htm[OL].
[2]中華人民共和國國家質(zhì)量監(jiān)督檢驗(yàn)檢疫總局. TSGT7001-2009.中國特種設(shè)備檢測研究院.北京:中國標(biāo)準(zhǔn)出版社,2009.
[3]王世江(改編),佘志龍(作者),陳昱勛(作者),等. Google Android SDK開發(fā)范例大全.3版[M].北京:人民郵電出版社,2011.
[4]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011-6-22.
[5]周治國.基于Java的E-mail系統(tǒng)客戶端的設(shè)計(jì)與實(shí)現(xiàn)[J].2004(22):169-172. [6]張孝祥.Java郵件開發(fā)詳解[M].北京:電子工業(yè)出版社,2007.
[7]王路群.Java高級程序設(shè)計(jì)[M].北京:中國水利水電出版社,2006.
[8]Lin Chuang,Tian Yuan,Yao Min.Green network and green evaluation:Mechanism,modeling and evaluation[J]. Chinese Journal of Computers,2011,34(4):596-622.
[責(zé)任編輯:曹明明]