基于Android平臺(tái)的簽到的管理系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于Android平臺(tái)的簽到的管理系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于Android平臺(tái)的簽到的管理系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于Android平臺(tái)的簽到的管理系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于Android平臺(tái)的簽到的管理系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

...wd......wd......wd...摘要隨著移動(dòng)通信技術(shù)和網(wǎng)絡(luò)技術(shù)的迅速開(kāi)展,手機(jī)系統(tǒng)發(fā)生了巨大的變化,從進(jìn)展簡(jiǎn)單通話功能的非智能手機(jī)到現(xiàn)在集上網(wǎng)、聊天、收發(fā)郵件、視頻會(huì)議等各種服務(wù)與娛樂(lè)為一身的智能手機(jī)系統(tǒng)。由Google公司牽頭眾多實(shí)力雄厚的軟硬件廠商加盟成立了OMS聯(lián)盟,并推出的Android平臺(tái)手機(jī)系統(tǒng)。作為時(shí)代的新生兒,Android手機(jī)操作平臺(tái)有著得天獨(dú)厚的優(yōu)勢(shì)廣闊的開(kāi)展前景。本文正是基于Android平臺(tái)開(kāi)發(fā)的手機(jī)簽到管理軟件。首先,本文對(duì)Android的背景和目前應(yīng)用的PalmOS、Symbian、WindowsMobile和Linux等智能手機(jī)操作系統(tǒng)進(jìn)展了簡(jiǎn)單的分析和比照。對(duì)開(kāi)發(fā)本軟件所基于的Android平臺(tái)進(jìn)展分析。介紹了Android平臺(tái)的體系構(gòu)造、平臺(tái)的功能特征。同時(shí)對(duì)本文開(kāi)發(fā)過(guò)程中用到的相關(guān)技術(shù)進(jìn)展介紹分析。其次,對(duì)基于Android平臺(tái)手機(jī)簽到管理系統(tǒng)進(jìn)展了需求分析與設(shè)計(jì),包括系統(tǒng)功能需求分析、系統(tǒng)用例分析及用戶界面需求分析。同時(shí),對(duì)系統(tǒng)進(jìn)展了設(shè)計(jì)。在設(shè)計(jì)時(shí),首先對(duì)系統(tǒng)進(jìn)展整體的層次構(gòu)造化設(shè)計(jì),然后對(duì)系統(tǒng)各個(gè)模塊進(jìn)展了詳細(xì)的設(shè)計(jì),包括類設(shè)計(jì)及用戶界面設(shè)計(jì)。再次,對(duì)基于Android平臺(tái)手機(jī)簽到管理系統(tǒng)進(jìn)展了系統(tǒng)實(shí)現(xiàn)。ut目錄5101摘要 117187Abstract 21443第1章緒論 312561.1課題背景 3197741.2開(kāi)發(fā)平臺(tái)選擇 44733第2章Android架構(gòu)分析 6219942.1Android功能特征6185232.2Android體系構(gòu)造 762222.2.1應(yīng)用程序?qū)?8231212.2.2應(yīng)用程序框架層 8183362.2.3系統(tǒng)運(yùn)行庫(kù)〔C/C++庫(kù)以及Android運(yùn)行庫(kù)〕層 9191652.2.4Linux內(nèi)核層 10286972.3Android應(yīng)用構(gòu)成和工作機(jī)制 10570第3章簽到管理軟件設(shè)計(jì)實(shí)現(xiàn) 12109953.1古盾簽到功能需求分析 12250583.2古盾簽到管理功能架構(gòu)圖13266203.3古盾簽到管理程序核心技術(shù)1391953.4古盾簽到管理程序功能實(shí)現(xiàn)14226853.4.1登錄界面 14182983.4.2主界面 16165673.4.3簽到功能實(shí)現(xiàn) 16321113.4.4簽離功能時(shí)間 1782343.4.5Menu菜單實(shí)現(xiàn)的功能 18303993.4.6實(shí)時(shí)路況信息設(shè)置界面 2167533.4.7人員信息錄入界面 22200433.4.8AP設(shè)置功能實(shí)現(xiàn) 23223523.4.9主要的布局文件 2326593.5測(cè)評(píng) 254466結(jié)論 2715198致謝 2824700參考文獻(xiàn) 2910223附錄1 303809附錄2 3215643附錄3 36緒論1.1課題背景目前企事業(yè)單位對(duì)員工的考勤管理,根本上都是采用傳統(tǒng)的打卡、指紋識(shí)別等被動(dòng)考勤制度,而對(duì)位于高層寫(xiě)字樓〔特別是電梯資源又比擬緊張的〕的企業(yè)員工常會(huì)因?yàn)榈入娞荻t到幾分鐘。而且現(xiàn)有考勤系統(tǒng)已經(jīng)不能滿足客戶的各種需求了,原因如下:〔1〕現(xiàn)有系統(tǒng)RS485型居多,它布線麻煩、施工工期長(zhǎng)、網(wǎng)絡(luò)不穩(wěn)定、系統(tǒng)總費(fèi)用高昂、后期網(wǎng)絡(luò)維護(hù)和更改困難?!?〕系統(tǒng)功能單一,需要安裝考勤系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、工控監(jiān)測(cè)幾套系統(tǒng),才能滿足考勤門禁收費(fèi)、生產(chǎn)數(shù)據(jù)采集、生產(chǎn)設(shè)備監(jiān)測(cè)等需要?!?〕系統(tǒng)不靈活,客戶的需求需要提交到系統(tǒng)制造商那里進(jìn)展個(gè)性化定制,造成客戶、供給商陷入頻繁的功能定制的漩渦里。因此開(kāi)發(fā)一個(gè)基于Android平臺(tái)利用WIFI考勤系統(tǒng)尤為重要。WIFI無(wú)線實(shí)時(shí)考勤系統(tǒng)具有強(qiáng)大的兼容性和功能擴(kuò)展性,實(shí)現(xiàn)動(dòng)態(tài)考勤,彌補(bǔ)目前考勤系統(tǒng)的缺陷;讓考勤更智能、更人性。本課題的目的在于掌握Android手機(jī)應(yīng)用開(kāi)發(fā)技術(shù)設(shè)計(jì)制作一款動(dòng)態(tài)考勤系統(tǒng)。本系統(tǒng)以Java語(yǔ)言為根基,結(jié)合Android移動(dòng)開(kāi)發(fā)平臺(tái),并利用Android提供的SDK,完成在Android平臺(tái)上運(yùn)行基于WIFI的簽到管理軟件,形成一款具有考勤等功能的手機(jī)應(yīng)用軟件。本課題的意義在于開(kāi)發(fā)一個(gè)基于Android平臺(tái)的手機(jī)簽到管理軟件開(kāi)發(fā)。該軟件可以通過(guò)驗(yàn)證用戶點(diǎn)擊的AP,根據(jù)系統(tǒng)服務(wù)時(shí)間來(lái)實(shí)現(xiàn)簽到、簽出,人員信息錄入可以將人員姓名、性別、身份證號(hào)、頭像上傳到服務(wù)器,可以根據(jù)道路實(shí)時(shí)狀況信息拍照上傳到服務(wù)器,管理員可以設(shè)置簽到的AP,每個(gè)登錄人員可以通過(guò)點(diǎn)擊簽到記錄來(lái)查看簽到、簽出的時(shí)間。1.2開(kāi)發(fā)平臺(tái)選擇首先看一下Symbian,它存在著以下的致命缺乏,Symbian是由摩托羅拉、西門子、諾基亞等幾家大型移動(dòng)通訊設(shè)備商共同出資組建的一個(gè)合資公司〔現(xiàn)已被諾基亞全額收購(gòu)〕,專門研發(fā)手機(jī)操作系統(tǒng),目前Symbian較成熟,。而Symbian操作系統(tǒng)的前身是EPOC,EPOC是ElectronicPieceofCheese的簡(jiǎn)寫(xiě),其原意為“使用電子產(chǎn)品可以像吃乳酪一樣簡(jiǎn)單〞,這就是它在設(shè)計(jì)時(shí)所堅(jiān)持的理念。Symbian是一個(gè)實(shí)時(shí)性、多任務(wù)的純32位操作系統(tǒng),具有功耗低、內(nèi)存占用少等特點(diǎn),非常適合手機(jī)等移動(dòng)設(shè)備使用。另外它是一個(gè)標(biāo)準(zhǔn)化的開(kāi)放式平臺(tái),任何人都可以為支持Symbian的設(shè)備開(kāi)發(fā)軟件。SymbianOS在市場(chǎng)份額上占絕對(duì)優(yōu)勢(shì),不過(guò)在開(kāi)發(fā)者數(shù)量上卻并不占優(yōu)勢(shì),目前Symbian程序員僅僅只有5萬(wàn)余人,與極為龐大的用戶群體不成比例。而且它致命缺乏是根本上還帶有濃厚的保守色彩,應(yīng)用軟件與我們?nèi)粘5腜C軟件有較大的理念差異,再者Symbian與互聯(lián)網(wǎng)的結(jié)合給人感覺(jué)仍不夠嚴(yán)密,互聯(lián)網(wǎng)應(yīng)用更多只是作為陪襯存在。Android平臺(tái)與此相反,移動(dòng)互聯(lián)網(wǎng)是它最重要的應(yīng)用,無(wú)論系統(tǒng)內(nèi)核、應(yīng)用軟件還是硬件設(shè)計(jì),幾乎都是圍繞著快捷的移動(dòng)互聯(lián)網(wǎng)應(yīng)用所展開(kāi),同時(shí)Android與PC平臺(tái)存在先天的基因聯(lián)系,可以很好的實(shí)現(xiàn)與PC設(shè)備的信息互享,更容易獲得用戶的廣泛認(rèn)可。與Android擁有一樣屬性的還有微軟的Windowsmobile。至于iPhone,它只是蘋(píng)果公司的封閉平臺(tái),用戶無(wú)法在iPhone中自行安裝應(yīng)用,所有的東西都應(yīng)該蘋(píng)果自行設(shè)計(jì)制造,從而確保利潤(rùn)不被第三方分享。蘋(píng)果自己為iPhone開(kāi)發(fā)了嵌入系統(tǒng)以及完整的應(yīng)用,但它并不宣揚(yáng)iPhone的軟件設(shè)計(jì),而是將iPhone作為一個(gè)包含軟硬件賣點(diǎn)的手機(jī)產(chǎn)品出售。同樣,蘋(píng)果式的奢華與時(shí)尚讓iPhone大獲成功,以至于成為手機(jī)市場(chǎng)的風(fēng)向標(biāo)。與蘋(píng)果相反,Android則是走完全開(kāi)放的道路,這種模式的巨大優(yōu)點(diǎn)在PC軟件領(lǐng)域已為業(yè)界所公認(rèn)是自由軟件高度活潑,錯(cuò)誤可以被快速修正,新的應(yīng)用、新的創(chuàng)意可以不斷出現(xiàn)。Android平臺(tái)的另外一個(gè)優(yōu)勢(shì)是標(biāo)準(zhǔn)化和跨平臺(tái)。Android和操作系統(tǒng)進(jìn)展了嚴(yán)密的整合,從而可以方便地使用操作系統(tǒng)的功能。這與難于使用操作系統(tǒng)功能的J2ME相比,無(wú)疑對(duì)開(kāi)發(fā)者有很大的吸引力。并且從圖形應(yīng)用界面的開(kāi)發(fā)上面來(lái)看,Android可以使用配置文件來(lái)描述圖形控件的布局,用Java代碼編寫(xiě)實(shí)際響應(yīng)代碼,這樣方便得多。當(dāng)然由于Android己經(jīng)提供了大量現(xiàn)成的應(yīng)用API和應(yīng)用工具,使得常規(guī)智能手機(jī)功能的開(kāi)發(fā)變得非常容易和簡(jiǎn)單。Android架構(gòu)分析Android是基于Linux內(nèi)核的軟件平臺(tái)的軟件和操作系統(tǒng),采用了軟件堆層〔SoftwareStack〕的架構(gòu)。由下而上,Android平臺(tái)的底層是Linux2.6內(nèi)核,硬件和其他軟件堆層之間是一個(gè)抽象隔離層,向上搭配Google,為Android開(kāi)發(fā)的類庫(kù)及Android運(yùn)行時(shí)再配合應(yīng)用程序架構(gòu),來(lái)開(kāi)發(fā)各種不同的應(yīng)用程序。2.1Android功能特征(1)應(yīng)用程序架構(gòu):在應(yīng)用程序架構(gòu)內(nèi)已經(jīng)具備多種不同的根基組件,在開(kāi)發(fā)應(yīng)用程序時(shí),就可以直接調(diào)用這些組件來(lái)使用,可以節(jié)省開(kāi)發(fā)應(yīng)用程序的心力及時(shí)間。(2)Dalvik虛擬機(jī)器:在Android平臺(tái)上所使用Java虛擬機(jī),不是Sim公司的標(biāo)準(zhǔn)Java虛擬機(jī),而是使用Google自主開(kāi)發(fā)的代號(hào)為Dalvik的虛擬機(jī),它在保證API方面的兼容同時(shí),針對(duì)移動(dòng)手機(jī)進(jìn)展了大幅優(yōu)化,占用資源更小,運(yùn)行效率更高。(3)集成的瀏覽器:集成的瀏覽器是Android內(nèi)建的瀏覽器,是以WebKit的瀏覽引擎為根基所開(kāi)發(fā)成的。WedKit是一個(gè)開(kāi)源瀏覽器網(wǎng)頁(yè)排版引擎,目前使用WebKit引擎的瀏覽器主要有,Safari,Midori,Epiphany等。配合Android手機(jī)的功能,可以在瀏覽網(wǎng)頁(yè)時(shí),到達(dá)更好的效果,例如:局部性的縮放網(wǎng)頁(yè)上的資訊、觸控式的操作等效果。(4)優(yōu)化的繪圖能力:在程序里可以用到的繪圖功能分為2D與3D兩個(gè)方面。在2D方面,Android提供了一套特有的類庫(kù)SGL,而在3D方面則是使用OpenGLES1.0(openGLforEmbeddedsystems)標(biāo)準(zhǔn)的類庫(kù)。它們是一種非??斓膱D形引擎,并且支持硬件加速。(5)SQLite數(shù)據(jù)庫(kù):SQLite提供構(gòu)造化的數(shù)據(jù)存取。SQLite是一款輕型的數(shù)據(jù)庫(kù),它的設(shè)計(jì)目標(biāo)是嵌入式的,目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用的資源非常低。它能夠支持Windows/Linux/Unix等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比方php,Java等,還有ODBC接口,同樣比起Mysql,PostgreSQL來(lái)講,它的處理速度比它們都快。它無(wú)需安裝和管理配置,它是一個(gè)儲(chǔ)存在單一磁盤(pán)文件中的完整數(shù)據(jù)庫(kù),體積小只有250KB但支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。它雖然很小巧,但是支持的SQL語(yǔ)句毫不遜色于其它開(kāi)源數(shù)據(jù)庫(kù)。同時(shí)它還支持事務(wù)功能和并發(fā)處理等等。SQLite也是一套開(kāi)放性的關(guān)聯(lián)式資料庫(kù),其特點(diǎn)在于輕量性方面的設(shè)計(jì)構(gòu)造,更適合在手機(jī)上使用。(6)多媒體的支持能力:主要用于播放媒體文件。這同時(shí)包括對(duì)音頻(如播放MP3或其他音樂(lè)文件等)和視頻(如播放從網(wǎng)上下載的視頻)的支持,并支持“播放URI地址〞(Note:URI即是統(tǒng)一資源識(shí)別地址)模式—在網(wǎng)絡(luò)上直接播放的流媒體。另外支持各種通用的靜態(tài)圖像格式,例如:JPG、PNG、GIF等格式。(7)GSM技術(shù):GlobalSystemforMobileCommunications,即全球移動(dòng)通訊系統(tǒng),俗稱〞全球通〞,是一種起源于歐洲的移動(dòng)通信技術(shù)標(biāo)準(zhǔn),是第二代移動(dòng)通信技術(shù),其開(kāi)發(fā)目的是讓全球各地可以共同使用一個(gè)移動(dòng)網(wǎng)絡(luò)標(biāo)準(zhǔn),讓用戶使用一部手機(jī)就能行遍全球。GSM技術(shù)是屬于手機(jī)硬件方面的展現(xiàn),也是在開(kāi)發(fā)Android應(yīng)用程序時(shí)可以突出的特點(diǎn)之一。(8)藍(lán)牙、EDGE、3G及Wi-Fi:藍(lán)牙是一種新型、開(kāi)放、低本錢、短距離的無(wú)線連接技術(shù),可取代短距離的電纜,實(shí)現(xiàn)話音和數(shù)據(jù)的無(wú)線傳輸。EDGE(EnhancedDataRateforGSM,Evolution),即增強(qiáng)型數(shù)據(jù)速率GSM演進(jìn)技術(shù)。EDGE是一種從GSM到3G的過(guò)渡技術(shù),它主要是在GSM系統(tǒng)中采用了一種新的調(diào)制方法,即最先進(jìn)的多時(shí)隙操作和SPSK調(diào)制技術(shù)。由于8PSK可將現(xiàn)有GSM網(wǎng)絡(luò)采用的GMSK調(diào)制技術(shù)的信號(hào)空間從2擴(kuò)展到8,從而使每個(gè)符號(hào)所包含的信息是原來(lái)的4倍。Wi-Fi(WirelessFidelity),即無(wú)線保真技術(shù),與藍(lán)牙技術(shù)一樣,同屬于在辦公室和家庭中使用的短距離無(wú)線技術(shù)。該技術(shù)使用的是2.4GHz附近的頻段,該頻段目前尚屬?zèng)]用許可的無(wú)線頻段。其目前可使用的標(biāo)準(zhǔn)有兩個(gè),分別是IEEE802.lla和IEEE802.11b。這些通訊能力也是屬于手機(jī)硬件方面的展現(xiàn),也是在開(kāi)發(fā)Android應(yīng)用程序時(shí)可以突出的特點(diǎn)之一。(9)GPS:GlobalPositioningSystem,即全球定位系統(tǒng),它是一個(gè)由覆蓋全球的24顆衛(wèi)星組成的衛(wèi)星系統(tǒng)。這個(gè)系統(tǒng)可以保證在任意時(shí)刻和任何地點(diǎn)都可以同時(shí)觀測(cè)到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測(cè)點(diǎn)的經(jīng)緯度和高度,以便實(shí)現(xiàn)導(dǎo)航、定位、授時(shí)等功能。這項(xiàng)技術(shù)可以用來(lái)引導(dǎo)飛機(jī)、船舶、車輛以及個(gè)人。這個(gè)同樣也是屬于手機(jī)硬體方面的表達(dá),也是在開(kāi)發(fā)Android應(yīng)用程序是可以突出的特點(diǎn)之一。2.2Android體系構(gòu)造Android是基于Linux內(nèi)核的軟件平臺(tái)的軟件和操作系統(tǒng),采用了軟件堆層〔SoftwareStack〕的架構(gòu),共分四層,由高到底:第1層是應(yīng)用程序?qū)?,提供了一系列核心?yīng)用程序;第2層是應(yīng)用程序框架層,提供了Android平臺(tái)根本的管理功能的組件征用機(jī)制;第3層是系統(tǒng)運(yùn)行庫(kù)層,由函數(shù)庫(kù)和Android運(yùn)行時(shí)構(gòu)成;第4層是Linux內(nèi)核,提供由操作系統(tǒng)內(nèi)核管理管理的底層根基功能,如圖2.1所示。圖2.1Android體系構(gòu)造圖2.1Android體系構(gòu)造2.2.1應(yīng)用程序?qū)討?yīng)用是用Java語(yǔ)言編寫(xiě)的運(yùn)行在虛擬機(jī)上的程序,如圖2.1中最上層局部所示。其實(shí),Google最開(kāi)場(chǎng)時(shí)就在Android系統(tǒng)中捆綁了一些核心應(yīng)用,比方E-mail客戶端、SMS短消息程序、日歷、地圖、瀏覽器、聯(lián)系人管理程序等等。2.2.2應(yīng)用程序框架層在AndroidSDK中,定義了讓開(kāi)發(fā)者使用與核心應(yīng)用程序一樣API的權(quán)限應(yīng)用程序框架,這是為了要簡(jiǎn)化組件的重新利用而設(shè)計(jì)的,應(yīng)用程序可以發(fā)布功能為其它應(yīng)用程序所使用。但是,這要受限于應(yīng)用程序架構(gòu)的安全機(jī)制,使用者以用同樣的機(jī)制來(lái)新增、置換組件。目前所有的應(yīng)用程序是由服務(wù)及系統(tǒng)來(lái)組成,包含有:(l)一套強(qiáng)大和可擴(kuò)展的視圖系統(tǒng):用來(lái)建構(gòu)一個(gè)應(yīng)用程序的根本組件,包了在開(kāi)發(fā)系統(tǒng)畫(huà)面時(shí),常用的列表、網(wǎng)格、文本框、按鈕等控制項(xiàng),甚至是內(nèi)嵌的Web瀏覽器。(2)內(nèi)容提供者:使應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)庫(kù)),或者共享它們自己的數(shù)據(jù)。(3)資源管理器:提供各種非程序代碼的資源讓?xiě)?yīng)用程序去使用。例如:本字符串、圖形文件或排版相關(guān)的布局文件。(4)通知管理器:提供給用程序在狀態(tài)欄中顯示應(yīng)用程序自定義的提示信息。(5)活動(dòng)管理器:管理所有應(yīng)用程序的生命周期及提供常用的導(dǎo)航回退功能。例如:啟動(dòng)應(yīng)用程序要用到的資源準(zhǔn)備及關(guān)閉應(yīng)用程序時(shí)釋放內(nèi)存及相關(guān)資源等工作。(6)視窗管理器:用來(lái)管理所有啟動(dòng)程序的視窗。(7)位置管理器:用來(lái)管理地圖服務(wù)的相關(guān)功能。(8)管理器:用來(lái)管理用戶撥打與接聽(tīng)的相關(guān)功能。(9)包管理器:管理所有安裝在Android系統(tǒng)內(nèi)的包。2.2.3系統(tǒng)運(yùn)行庫(kù)〔C/C++庫(kù)以及Android運(yùn)行庫(kù)〕層在Android中包含一些C/C++的類庫(kù),這些類庫(kù)能被Android系統(tǒng)中不同的組件來(lái)使用。開(kāi)發(fā)者可以通過(guò)應(yīng)用程序框架使用這些功能。局部核心類庫(kù)列表如下:(1)surfaceManager:主要的功能是讓開(kāi)發(fā)者可以去存取/顯示系統(tǒng)及管理的功能,在[顯示]與[存取操作]間的對(duì)應(yīng)、互動(dòng)以及實(shí)現(xiàn)無(wú)接縫的2D/3D多應(yīng)用程序之間的整合。例如:在2D、2D顯示上的合成、疊合動(dòng)作。(2)3Dlibraries:主要是依openGLES1.0標(biāo)準(zhǔn)所定義的3D繪圖引擎。該庫(kù)使用硬件加速(當(dāng)硬件可用時(shí)),可以將硬件的3D功能做最正確化的處理顯示。(3)SGL:主要是處理有關(guān)顯示2D方面的繪圖引擎。(4)MediaFramework:主要是以packetVideo公司的OpenCORE為根基所開(kāi)展的多媒體類庫(kù),該庫(kù)支持回放和錄制大量流行的音視頻格式和靜態(tài)圖片。例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式(5)FreeType:主要是用來(lái)顯示點(diǎn)陣圖和處理向量字形的。(6)SSL:(secureSocketsuyer),中文名為“安全套接層協(xié)議層〞,它是網(wǎng)景公司提出的基于WEB應(yīng)用的安全協(xié)議,當(dāng)前版本為3.0。SSL協(xié)議指定了一種在應(yīng)用程序協(xié)議(如、Telenet、NMTP和FTP等)和TCP/IP協(xié)議之間提供數(shù)據(jù)安全性分層的機(jī)制,它為TCP/IP連接提供數(shù)據(jù)加密、服務(wù)器認(rèn)證、消息完整性以及可選的客戶機(jī)認(rèn)證。它已被廣泛地用于Web瀏覽器與服務(wù)器之間的身份認(rèn)證和加密數(shù)據(jù)傳輸。SSL協(xié)議位于TCP膽協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層:SSL記錄協(xié)議(SSLRecordProtocol):它建設(shè)在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等根本功能的支持。SSL握手協(xié)議(SSLHandshakeprotocol):它建設(shè)在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)場(chǎng)前,通訊雙方進(jìn)展身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。SSL協(xié)議提供的服務(wù)主要有:①認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器;②加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取;③維護(hù)數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過(guò)程中不被改變。(7)SQLite:SQLite是一套開(kāi)放性的關(guān)聯(lián)式資料庫(kù),能夠被所有應(yīng)用程序使用的輕量級(jí)的關(guān)系數(shù)據(jù)庫(kù)引擎。(8)webKit:是一個(gè)先進(jìn)的網(wǎng)頁(yè)瀏覽器引擎,被用來(lái)構(gòu)建Android瀏覽器和內(nèi)嵌的web視圖,也可以讓開(kāi)發(fā)者利用這個(gè)引擎來(lái)做不同的應(yīng)用。(9)libc:就是一個(gè)BSD標(biāo)準(zhǔn)C類庫(kù)。但是,針對(duì)Linux嵌入式裝置進(jìn)展過(guò)最正確化的調(diào)整。2.2.4Linux內(nèi)核層Android的核心系統(tǒng)服務(wù)基于Linux2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等都依賴于該內(nèi)核。2.3Android應(yīng)用構(gòu)成和工作機(jī)制對(duì)于一個(gè)Android應(yīng)用程序來(lái)說(shuō),是由Activity、IntentReceiver、Service、ContentProvider四局部組成,但并不是每一個(gè)Android應(yīng)用程序都必須由這四局部組成。在應(yīng)用程序中使用時(shí),需要在配置文件AndroidManifest.xml中進(jìn)展配置。這個(gè)配置文件是每個(gè)Android應(yīng)用程序所必需的,用于定義應(yīng)用程序的組件、組件的功能以及必要條件等。Android應(yīng)用的構(gòu)成和工作流程如圖2.2圖2.2Android的構(gòu)成和工作流程圖2.2Android的構(gòu)成和工作流程簽到管理軟件設(shè)計(jì)實(shí)現(xiàn)開(kāi)發(fā)一個(gè)基于Android平臺(tái)的手機(jī)簽到管理軟件開(kāi)發(fā)。該軟件可以通過(guò)驗(yàn)證用戶點(diǎn)擊的AP,根據(jù)系統(tǒng)服務(wù)時(shí)間來(lái)實(shí)現(xiàn)簽到、簽出,人員信息錄入可以將人員姓名、性別、身份證號(hào)、頭像上傳到服務(wù)器,可以根據(jù)道路實(shí)時(shí)狀況信息拍照上傳到服務(wù)器,管理員可以設(shè)置簽到的AP,每個(gè)登錄人員可以通過(guò)點(diǎn)擊簽到記錄來(lái)查看簽到、簽出的時(shí)間。開(kāi)發(fā)環(huán)境:AndroidSDK4.0開(kāi)發(fā)平臺(tái):Eclipse開(kāi)發(fā)語(yǔ)言:Java3.1古盾簽到功能需求分析簽到管理系統(tǒng)應(yīng)該能完成七種功能包括登錄功能,簽到、簽離功能,人員信息錄入功能及實(shí)景信息上傳功能,AP設(shè)置,時(shí)間設(shè)置?!?〕登錄功能進(jìn)展身份的驗(yàn)證。手機(jī)客戶端把賬號(hào)和密碼通過(guò)網(wǎng)路傳遞給服務(wù)器,有服務(wù)器進(jìn)展數(shù)據(jù)庫(kù)查詢,如假設(shè)賬號(hào)和密碼匹配,則將用戶信息和數(shù)據(jù)庫(kù)內(nèi)容傳遞到手機(jī)端,不匹配則返回錯(cuò)誤信息提示錯(cuò)誤?!?〕簽到功能的實(shí)現(xiàn),判斷是否在簽到時(shí)間,是否已經(jīng)覆蓋AP,是否已經(jīng)設(shè)置AP。假設(shè)全部設(shè)定,則提示簽到成功,假設(shè)不在簽離時(shí)間則提示不在簽到時(shí)間,假設(shè)沒(méi)有置AP則提示請(qǐng)管理員設(shè)置AP?!?〕簽離功能的實(shí)現(xiàn),判斷是否在簽離時(shí)間,是否已經(jīng)覆蓋AP,是否已經(jīng)設(shè)置AP。假設(shè)全部設(shè)定,則提示簽離成功,假設(shè)不在簽離時(shí)間則提示不在簽離時(shí)間,假設(shè)沒(méi)有置AP則提示請(qǐng)管理員設(shè)置AP。實(shí)景信息上傳功能是調(diào)用系統(tǒng)相機(jī)拍照后進(jìn)入實(shí)時(shí)信息上傳界面,填寫(xiě)路況信息,照片信息,道路信息不能為空。人員信息錄入功能是填寫(xiě)姓名,性別,身份證號(hào),頭像選擇并進(jìn)展上傳。AP設(shè)置功能,首先判斷WIFI是否翻開(kāi),如果沒(méi)有翻開(kāi)則翻開(kāi)WIFI,向服務(wù)器發(fā)送請(qǐng)求,如果獲取WIFI列表,與當(dāng)前WIFI列表比照,如果已存在則提示當(dāng)前地區(qū)已設(shè)置AP,否則再次發(fā)送AP設(shè)置請(qǐng)求,假設(shè)服務(wù)器返回成功,則提示AP設(shè)置成功。時(shí)間設(shè)置功能,可以設(shè)置簽到簽離的時(shí)間。時(shí)間設(shè)置時(shí)實(shí)行24小時(shí)制。3.2古盾簽到管理功能架構(gòu)圖程序運(yùn)行流程如圖3.1所示,首先用戶登錄,進(jìn)入主界面,可以實(shí)現(xiàn)簽到管理、簽離管理、實(shí)時(shí)狀況管理、人員信息錄入、AP設(shè)置、時(shí)間設(shè)置、簽到記錄。用戶登錄用戶登錄簽到管理實(shí)時(shí)狀況管理人員信息錄入簽離管理AP設(shè)置時(shí)間設(shè)置簽到記錄圖3.1古盾簽到管理功能流程圖3.3古盾簽到管理程序核心技術(shù)〔1〕WIFI的BSSID和SSID獲取,BSSID作為簽到、簽離功能實(shí)現(xiàn)的唯一標(biāo)識(shí)。SSID表示一個(gè)子網(wǎng)的名字,無(wú)線路由通過(guò)這個(gè)名字可以為其它設(shè)備標(biāo)識(shí)這個(gè)無(wú)線路由的子網(wǎng)。設(shè)備進(jìn)展掃描的時(shí)候,就會(huì)將相應(yīng)SSID掃描到,然后就能夠選擇相應(yīng)的SSID連接到相應(yīng)的無(wú)線網(wǎng)絡(luò)〔當(dāng)然不掃描,理論上也可以直接指定自己事先已經(jīng)知道的SSID進(jìn)展連接〕。SSID可以和其它的重復(fù),這樣掃描的時(shí)候會(huì)看到兩個(gè)同樣SSID的無(wú)線網(wǎng)絡(luò),其實(shí)這一般用于將一個(gè)無(wú)線網(wǎng)絡(luò)擴(kuò)大的情況〔畢竟無(wú)線路由器無(wú)線信號(hào)的覆蓋范圍是有線的〕:當(dāng)想要擴(kuò)大一個(gè)無(wú)線網(wǎng)絡(luò)〔即SSID固定〕的范圍的時(shí)候,可以給多個(gè)路由設(shè)置一樣的SSID來(lái)到達(dá)這個(gè)目的。SSID和BSSID不一定一一對(duì)應(yīng),一個(gè)BSSID在不同的Channel上面可能會(huì)對(duì)應(yīng)到多個(gè)SSID,但是它們?cè)谝粋€(gè)Channel是一一對(duì)應(yīng)的;另外,漫游的時(shí)候,雖然SSID不變,但是BSSID一定是會(huì)變化的。我們經(jīng)??梢钥吹綄?shí)際數(shù)據(jù)包中的AP的MAC地址和BSSID只差幾位,其實(shí)實(shí)際設(shè)備的MAC地址可能只有一個(gè),和BSSID沒(méi)什么對(duì)應(yīng)關(guān)系。在一個(gè)包含了路由功能和AP功能的無(wú)線路由器〔FatAP〕上面,很可能是:路由器有兩個(gè)MAC地址,一個(gè)用于外網(wǎng)〔WAN〕,一個(gè)用于內(nèi)網(wǎng)(WLAN和LAN),一般路由器上面或者配置路由器的網(wǎng)頁(yè)上面只標(biāo)注外網(wǎng)的MAC地址,內(nèi)網(wǎng)的MAC地址和外網(wǎng)MAC地址一般只有幾位不同〔甚至連續(xù),也有些相差很多的例外〕。所以簽到顯示的是SSID,和唯一識(shí)別碼是BSSID?!?〕協(xié)議實(shí)現(xiàn)客戶端與服務(wù)器的連接。是Web聯(lián)網(wǎng)的根基,也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一,協(xié)議是建設(shè)在TCP協(xié)議之上的一種協(xié)議。連接最顯著的特點(diǎn)是客戶端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng),在請(qǐng)求完畢后,會(huì)主動(dòng)釋放連接。從建設(shè)連接到關(guān)閉連接的過(guò)程稱為“一次連接〞。在1.0中,客戶端的每次請(qǐng)求都要求建設(shè)一次單獨(dú)的連接,在處理完本次請(qǐng)求后,就自動(dòng)釋放連接。在1.1中則可以在一次連接中處理多個(gè)請(qǐng)求,并且多個(gè)請(qǐng)求可以重疊進(jìn)展,不需要等待一個(gè)請(qǐng)求完畢后再發(fā)送下一個(gè)請(qǐng)求?!?〕Activity之間信息傳遞。Android為了屏蔽進(jìn)程的概念,利用不同的組件來(lái)表示進(jìn)程之間的通信。組件間通信的核心機(jī)制是Intent,通過(guò)Intent可以開(kāi)啟一個(gè)Activity或Service,不管這個(gè)Activity或Service是屬于當(dāng)前應(yīng)用還是其它應(yīng)用的。3.4古盾簽到管理程序功能實(shí)現(xiàn)3.4.1登錄界面程序運(yùn)行結(jié)果的初始界面如圖3.2所示,點(diǎn)擊IP本地按鈕就跳轉(zhuǎn)到IP輸入界面,如圖3.3,輸入完IP,然后輸入用戶名密碼,如果正確就進(jìn)入主界面。//用戶登錄檢測(cè)try{if(etUsername.getText().toString().equals("") ||etPassword.getText().toString().equals("")){Toast.makeText(this,"請(qǐng)輸入用戶名或密碼",Toast.LENGTH_LONG) .show();}else{user=newUserInfo(etUsername.getText().toString(),etPassword.getText().toString()); //返回?cái)?shù)據(jù)orgId Stringresult="-1"; result=AccountChecker.getServiceFeedback(etUsername.getText().toString(),etPassword.getText().toString(),this); //檢測(cè)登錄 if(result.equals("-1")){ Toast.makeText(this,R.string.wrongUP, Toast.LENGTH_LONG).show(); }else{ parseExist(result); gdamApp.setUser(user); gdamApp.setIninfo(idfo); Intentintent=newIntent(this,GdamActivity.class); gdamApp.setLoaclUserInfo(user); this.finish(); this.startActivity(intent); } } }catch(Exceptione){ e.printStackTrace(); }}圖3.2古盾簽到管理登錄界面圖3.3古盾簽到管理IP輸入界面//IP地址保存GdamApplicationgdamApp=(GdamApplication)this.getApplication(); Intentintent=null; switch(view.getId()){ caseR.id.btServiceipOk:gdamApp.setServiceIp(etServiceip.getText().toString()); this.finish(); break; }3.4.2主界面主界面的設(shè)置主要放四個(gè)按鈕,一個(gè)是菜單按鈕,翻開(kāi)顯示菜單,菜單存放ListView顯示AP設(shè)置,時(shí)間設(shè)置,簽到記錄等。主界面放一個(gè)簽到按鈕,點(diǎn)擊簽到按鈕判斷是否已經(jīng)設(shè)置AP,是否在簽到時(shí)間,如果是的話,則提示在某地簽到成功。點(diǎn)擊簽離按鈕則同樣判斷是否已經(jīng)設(shè)置AP,是否在簽到時(shí)間,如果是的話,則提示在某地簽到成功,點(diǎn)擊實(shí)況信息上傳,則調(diào)用系統(tǒng)相機(jī),拍照成功后進(jìn)入信息上傳界面,填好信息則上傳,上傳成功提示上傳成功。點(diǎn)擊人員信息錄入進(jìn)如信息錄入界面。信息錄入可以上傳頭像,身份證要判別是否是有效身份證。詳細(xì)代碼在附錄1。3.4.3簽到功能實(shí)現(xiàn)當(dāng)點(diǎn)擊簽到按鈕,判斷是否在簽到時(shí)間,是否已經(jīng)覆蓋AP,是否已經(jīng)設(shè)置AP。如圖3.4所示,//簽到功能實(shí)現(xiàn)if(isCovered){ SignRecordInfosignRecordInfo=newSignRecordInfo(type, System.currentTimeMillis(),gdamApp.getUser());if(type==Constant.RECORD_TYPE_SIGNIN){ try{if(SignRecordChecker.addServiceSignRecord( signRecordInfo,sap.getBSSID(), idInfo.getOrgId(),this).equals("1")){Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽到成功", Toast.LENGTH_LONG).show();}else{ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽到失敗", Toast.LENGTH_LONG).show();} }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace();}圖3.4古盾簽到主界面3.4.4簽離功能時(shí)間當(dāng)點(diǎn)擊簽到按鈕,判斷是否在簽離時(shí)間,是否已經(jīng)覆蓋AP,是否已經(jīng)設(shè)置AP。假設(shè)全部設(shè)定,則提示簽到成功,假設(shè)不在簽離時(shí)間則提示不在簽離時(shí)間,假設(shè)沒(méi)有設(shè)置AP則提示請(qǐng)管理員設(shè)置AP。//簽離功能實(shí)現(xiàn)if(type==Constant.RECORD_TYPE_SIGNOUT){try{ if(SignRecordChecker.addServiceSignRecord( signRecordInfo,sap.getBSSID(), idInfo.getOrgId(),this).equals("1")){ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽離成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽離失敗", Toast.LENGTH_LONG).show(); } }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }else{ Toast.makeText(GdamActivity.this, this.getResources().getString(R.string.setap), Toast.LENGTH_LONG).show();}3.4.5Menu菜單實(shí)現(xiàn)的功能在查看照片的界面中,點(diǎn)擊Menu按鈕,會(huì)顯示個(gè)ListView:AP設(shè)置,時(shí)間設(shè)置,簽到列表,注銷,退出,如圖3.6所示:顯示Menu菜單的程序功能模塊如下://菜單按鈕定義privatevoidinitMenuItemNames(){ this.menuItemNames=newString[menuItems.length]; for(inti=0;i<menuItems.length;i++){ if(menuItems[i]=="Main"){ menuItemNames[i]=this.getResources().getString(R.string.main); continue; } if(menuItems[i]=="ApSettings"){ menuItemNames[i]=this.getResources().getString( R.string.apSettings); continue; } if(menuItems[i]=="TimeSettings"){ menuItemNames[i]=this.getResources().getString( R.string.timesettings); continue; } if(menuItems[i]=="SignRecord"){ menuItemNames[i]=this.getResources().getString( R.string.signrecord); continue; } if(menuItems[i]=="Logout"){ menuItemNames[i]=this.getResources().getString( R.string.logout); continue; } if(menuItems[i]=="Exit"){ menuItemNames[i]=this.getResources().getString(R.string.exit); continue; } menuItemNames[i]="Notfound"; }點(diǎn)擊菜單按鈕時(shí),觸發(fā)onOptionsItemSelected(MenuItemitem)這個(gè)方法,通過(guò)獲取item的值來(lái)判斷監(jiān)聽(tīng)事件的響應(yīng),當(dāng)獲取的值為Main時(shí)調(diào)用進(jìn)入主界面這個(gè)類,當(dāng)獲取的值為ApSettings時(shí)跳轉(zhuǎn)進(jìn)入AP設(shè)置這個(gè)類,當(dāng)獲取的值為TimeSettings時(shí)調(diào)用時(shí)間設(shè)置這個(gè)類,當(dāng)獲取的值為SignRecord時(shí)顯示簽到記錄列表,當(dāng)獲取的值為L(zhǎng)ogout時(shí)注銷當(dāng)前用戶,當(dāng)獲取的值為Exit時(shí)退出當(dāng)前用戶。程序功能模塊如下:@Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition, longid){ GdamApplicationgdamApp=(GdamApplication)this.getApplication(); Intentintent; Stringitem=this.menuItems[position]; if(item=="Main"){//進(jìn)入主菜單 intent=newIntent(this,GdamActivity.class); this.startActivity(intent); return; } if(item=="ApSettings"){//進(jìn)入ap設(shè)置界面 if(idfo.getTelephonepur().equals("1")){ if(WifiHandler.initWifiManager(this)){ intent=newIntent(this,WifiListActivity.class); this.startActivity(intent); return; }else{ Threadthread=newThread(this); thread.start(); return; } }else{ Toast.makeText(this,"無(wú)權(quán)限操作",Toast.LENGTH_SHORT).show(); } } if(item=="TimeSettings"){//進(jìn)入設(shè)置時(shí)間界面 if(idfo.getTelephonepur().equals("1")){ Stringresult="-1"; try{ result=TimeChecker.getServiceTimeSettings( idfo.getOrgId(),this); }catch(ParseExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } if(result.equals("-1")){ intent=newIntent(this,TimeSettingsActivity.class); BundlemBundle=newBundle(); mBundle.putSerializable(Constant.KEY_TIMEINFO,newTimeInfo()); intent.putExtras(mBundle); //intent.putExtra(Constant.KEY_TIMEINFO,timeInfo); this.startActivity(intent); }else{ TimeInfotimeInfo=ParseUtil.parseTime(result); intent=newIntent(this,TimeSettingsActivity.class); BundlemBundle=newBundle(); mBundle.putSerializable(Constant.KEY_TIMEINFO,timeInfo); intent.putExtras(mBundle);圖3.5古盾簽到菜單界面圖3.6古盾簽到時(shí)間設(shè)置界面 this.startActivity(intent); } }else{ Toast.makeText(this,"無(wú)權(quán)限操作",Toast.LENGTH_SHORT).show(); } }if(item=="SignRecord"){//進(jìn)入簽到記錄界面 intent=newIntent(this,SignRecordActivity.class); this.startActivity(intent); return; } if(item=="Logout"){ gdamApp.getUser().setNull(); gdamApp.clearLocalUserInfo(); this.finish(); intent=newIntent(this,LoginActivity.class); startActivity(intent); return; } if(item=="Exit"){ gdamApp.onTerminate(); return; }3.4.6實(shí)時(shí)路況信息設(shè)置界面點(diǎn)擊拍照按鈕,調(diào)用系統(tǒng)相機(jī)拍照后進(jìn)入實(shí)時(shí)信息上傳界面,填寫(xiě)路況信息,照片信息,道路信息不能為空。如圖3.8所示://上傳照片功能實(shí)現(xiàn)if(this.preBitmap!=null){ StringimageComment=((EditText)this .findViewById(R.id.etComment)).getText().toString(); StringAddress=adEt.getText().toString(); if(Address.equals("")){ Toast.makeText( this, this.getResources().getString(R.string.nulladdress), Toast.LENGTH_SHORT).show(); }else{ ImageInfoimage=newImageInfo(this.preBitmap, imageComment,Address); if(!ImageChecker.addImage(image,idInfo.getAdminId(), idInfo.getAdminId(),this).equals("-1")){ Toast.makeText(this, getResources().getString(R.string.addimageok), Toast.LENGTH_LONG).show(); }else{ Toast.makeText( this, getResources().getString(R.string.addimagefail), Toast.LENGTH_LONG).show(); } this.finish(); } }else{ Toast.makeText(this, this.getResources().getString(R.string.noimage), Toast.LENGTH_SHORT).show(); } break; } }圖3.8實(shí)時(shí)道路信息錄入界面圖3.9人員信息錄入界面3.4.7人員信息錄入界面點(diǎn)擊人員信息錄入按鈕進(jìn)入人員信息錄入界面,填寫(xiě)姓名,性別,身份證號(hào),頭像選擇,效果如圖3.9所示,程序功能模塊如下://人員信息上傳caseR._register_register_bt: //保存 name=nameEt.getText().toString(); cardNo=idEt.getText().toString(); if(name.equals("")){ Toast.makeText(this, this.getResources().getString(R.string.nullusername), Toast.LENGTH_LONG).show(); }elseif(sex.equals("")){ Toast.makeText(this, this.getResources().getString(R.string.nullsex), Toast.LENGTH_LONG).show(); }elseif(!TestLegalUtil.checkCardNo(cardNo)){ Toast.makeText(this, this.getResources().getString(R.string.ilegalcardnumber), Toast.LENGTH_LONG).show(); }elseif(bitmap==null){ result=InfoRegisterChecker.setPersonInfo(name,sex,cardNo, "null",idfo.getOrgId(),this); }else{ PersonInfopersonInfo=newPersonInfo(name,sex,cardNo, bitmap); result=InfoRegisterChecker.setPersonInfo(personInfo, idfo.getOrgId(),this); } if(result.equals("1")){ Toast.makeText(this, this.getResources().getString(R.string.savesucess), Toast.LENGTH_LONG).show(); this.finish(); }elseif(result.equals("-1")){ Toast.makeText(this, this.getResources().getString(R.string.savefail), Toast.LENGTH_LONG).show(); }elseif(result.equals("0")){ Toast.makeText( this, this.getResources().getString(R.string.cardnumberexsit), Toast.LENGTH_LONG).show(); }elseif(result.equals("-2")){ return; }else{ Toast.makeText(this, this.getResources().getString(R.string.failsystem), Toast.LENGTH_LONG).show(); }3.4.8AP設(shè)置功能實(shí)現(xiàn)當(dāng)點(diǎn)Menu菜單“AP〞時(shí),首先判斷WIFI是否翻開(kāi),如果沒(méi)有翻開(kāi)則翻開(kāi)WIFI,向服務(wù)器發(fā)送請(qǐng)求,如果獲取WIFI列表,與當(dāng)前WIFI列表比照,如果已存在則提示當(dāng)前地區(qū)已設(shè)置AP,否則再次發(fā)送AP設(shè)置請(qǐng)求,假設(shè)服務(wù)器返回成功,則提示AP設(shè)置成功。程序功能代碼實(shí)現(xiàn)參照附錄3。3.4.9主要的布局文件在Android應(yīng)用開(kāi)發(fā)中,UI的設(shè)計(jì)主要寫(xiě)在.XML文件中,實(shí)現(xiàn)主界面布局的main.xml文件程序模塊如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:background="@drawable/bg"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"> <Button android:id="@+id/btHead" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/head"/> </LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="180dp"android:layout_weight="1"android:orientation="horizontal"android:gravity="right">底部是由四個(gè)按鈕橫向排放的,分別為簽到,簽離,實(shí)況信息上傳,人員信息錄入。按鈕的背景是同過(guò)XML文件定義的,點(diǎn)擊是原圖片,點(diǎn)擊后背景變?yōu)辄S色。每個(gè)按鈕的大小一樣,通過(guò)Layout_weight=1定義的,設(shè)置Id來(lái)為每個(gè)按鈕獲取唯一的Id,當(dāng)點(diǎn)擊按鈕可以同過(guò)唯一標(biāo)識(shí)的Id來(lái)實(shí)現(xiàn)Onlick()方法。按鈕的高度寬度都是自適用。背景通過(guò)PS做出的圖片。<Buttonandroid:id="@+id/btSignIn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:layout_margin="5dp"android:background="@drawable/sign"/><Buttonandroid:id="@+id/btSignout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/xsignout"/><Buttonandroid:id="@+id/ibCamera"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:layout_margin="5dp" android:background="@drawable/xcamer"android:contentDescription="@string/ibcamera"/><Buttonandroid:id="@+id/inser_personifo_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:layout_margin="5dp"android:background="@drawable/xinforegister"android:contentDescription="@string/ibmore"/></LinearLayout>3.5測(cè)評(píng)以前的簽到管理系統(tǒng)都是基于有線網(wǎng)絡(luò)的技術(shù),而且是rs485居多,這種總線是需要專業(yè)的布線技術(shù),就算是如此,有時(shí)候也難也建成質(zhì)量良好的網(wǎng)絡(luò),因?yàn)?85技術(shù)本來(lái)就是不是很標(biāo)準(zhǔn),基于有線網(wǎng)絡(luò)的機(jī)器,布線本錢昂貴,使用還是離不開(kāi)布線?,F(xiàn)在基于無(wú)線通訊的機(jī)器是未來(lái)的開(kāi)展方向?,F(xiàn)在最成熟的無(wú)線網(wǎng)絡(luò)有WIFI、藍(lán)牙等,其中WIFI效果最好,原來(lái)價(jià)格昂貴,技術(shù)難以掌握?,F(xiàn)在開(kāi)展很快,所以WIFI是簽到管理最大亮點(diǎn)?!?〕使用簡(jiǎn)單,不需要布線,因?yàn)椴季€是一個(gè)很專業(yè)的工作?!?〕使用WIFI技術(shù),很多客戶對(duì)此類設(shè)備非常熟悉,配置機(jī)器和編寫(xiě)應(yīng)用程序接口得心應(yīng)手?!?〕性能突出,WIFI通訊速度,在實(shí)時(shí)、大數(shù)據(jù)量的情況下有明顯的優(yōu)勢(shì)?!?〕成熟可靠,WIFI是現(xiàn)在非常成熟穩(wěn)定的工業(yè)和商業(yè)產(chǎn)品?!?〕網(wǎng)絡(luò)組建容易,小區(qū)域直接覆蓋,如果大區(qū)域可以通過(guò)無(wú)線AP覆蓋,類似香港機(jī)場(chǎng)非常龐大,但是都有WIFI信號(hào)。〔6〕使用WIFI可以工程工期大大縮短,節(jié)約工程時(shí)間,減少人員開(kāi)銷,大大節(jié)約了公司的運(yùn)營(yíng)資本。〔7〕形象高端,防止和普通產(chǎn)品陷入價(jià)格和性能競(jìng)爭(zhēng)的漩渦中。由競(jìng)爭(zhēng)的“紅海〞跳入競(jìng)爭(zhēng)的“藍(lán)海〞領(lǐng)域。結(jié)論在如今的手機(jī)領(lǐng)域中,智能機(jī)已經(jīng)成為未來(lái)開(kāi)展的必然趨勢(shì),如何更好的服務(wù)群眾,是我們程序員和設(shè)計(jì)師的問(wèn)題。不斷的創(chuàng)新,不斷的發(fā)現(xiàn)新的需求和實(shí)現(xiàn)新的需求,就需要我們一代代人的努力。任何問(wèn)題都不是問(wèn)題。只要你毅力足夠,意志足夠,任何問(wèn)題都不是問(wèn)題。由于之前對(duì)于Android了解不是很多,但是整個(gè)軟件主要就是用android語(yǔ)言進(jìn)展開(kāi)發(fā),而且對(duì)于Android這個(gè)系統(tǒng)一點(diǎn)都不了解,畢業(yè)設(shè)計(jì)最初感覺(jué)無(wú)從下手,但是安心讀了幾本關(guān)于Android編程的書(shū),自己練習(xí)了10多個(gè)小程序之后對(duì)于Android就有了一些了解,慢慢的找到了解決問(wèn)題的方式。事實(shí)證明,只要認(rèn)真努力,沒(méi)有不可能的事情,沒(méi)有永遠(yuǎn)是問(wèn)題的問(wèn)題。同樣的我們?cè)谶@個(gè)基于Android的簽到管理系統(tǒng)的手機(jī)應(yīng)用軟件,在教師幫助指導(dǎo)下,我查找同一類簽到管理應(yīng)用軟件,學(xué)習(xí)它們的功能模塊,為我們自己的手機(jī)相冊(cè)應(yīng)用軟件準(zhǔn)備材料,最終經(jīng)過(guò)1個(gè)月的努力,終于實(shí)現(xiàn)了我期望的功能。由于時(shí)間倉(cāng)促,及本人理論知識(shí)、開(kāi)發(fā)技術(shù)、實(shí)踐經(jīng)歷和現(xiàn)有設(shè)備的局限,該系統(tǒng)難免存在許多的缺乏之處,有待于改良和完善。致謝本次畢業(yè)設(shè)計(jì)論文是在楊立力教師的耐心講解與精心輔導(dǎo)下完成的。經(jīng)過(guò)1個(gè)月緊張而忙碌的畢業(yè)設(shè)計(jì),使自己得到了很大的收獲,這段日子是自己人生階段中最難忘的一次經(jīng)歷,雖然在設(shè)計(jì)中遇到了許多問(wèn)題與困難,但是在楊立力教師的啟發(fā)與指導(dǎo)下,通過(guò)自己不懈的努力以及同學(xué)的幫助,最終這些問(wèn)題與困難都得以圓滿解決。在此期間,自己的專業(yè)知識(shí)與綜合能力都得到了相應(yīng)的提高。而且從教師那里學(xué)到了嚴(yán)謹(jǐn)、務(wù)實(shí)、認(rèn)真的工作態(tài)度和極強(qiáng)的敬業(yè)精神,這些將為自己在社會(huì)中立足打下了良好的根基。從設(shè)計(jì)的選題到資料的搜集直至最后設(shè)計(jì)的修改的整個(gè)過(guò)程中,花費(fèi)了楊教師很多的珍貴時(shí)間和精力,在此向?qū)煴硎局孕牡馗兄x!導(dǎo)師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,開(kāi)拓進(jìn)取的精神和高度的責(zé)任心都將使學(xué)生受益終生!還要感謝幫我的同學(xué)們,是你們?cè)谖移綍r(shí)設(shè)計(jì)中和我一起探討問(wèn)題,并指出我設(shè)計(jì)上的誤區(qū),使我能及時(shí)的發(fā)現(xiàn)問(wèn)題把設(shè)計(jì)順利的進(jìn)展下去,沒(méi)有你們的幫助我不可能這樣順利地結(jié)稿,在此表示深深的謝意。參考文獻(xiàn)[1]汪永松.Android平臺(tái)開(kāi)發(fā)之旅[M].北京:機(jī)械工業(yè)出版社,2010[2]朱桂英.Android開(kāi)發(fā)應(yīng)用從入門到精通[M].北京:中國(guó)鐵道出版社,2011[3]RetoMeie.Android高級(jí)編程[M].北京:清華大學(xué)出版社,2010[4]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011[5]佘志龍.GoogleAndroidSDK開(kāi)發(fā)范例大全[M].北京:人民郵電出版社,2010[6]李寧.Android/OPhone開(kāi)發(fā)完全講義[M].北京:中國(guó)水利水電出版社,2010[7]楊文志.GoogleAndroid程序設(shè)計(jì)指南[M].北京:電子工業(yè)出版社,2009[8]王向輝.Android應(yīng)用開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2010[9]楊豐富.Android應(yīng)用開(kāi)發(fā)揭秘[M].北京:機(jī)械工業(yè)出出版社,2010附錄1//簽到,簽離 publicvoidsign(bytetype){ GdamApplicationgdamApp=(GdamApplication)this.getApplication(); Stringresult="-1"; try{ result=ApChecker.getServiceAp(this,idInfo.getOrgId()); }catch(ClientProtocolExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } if(result.equals("-1")){ Toast.makeText(GdamActivity.this, this.getResources().getString(R.string.failgetap), Toast.LENGTH_LONG).show(); }else{ booleanisCovered=false; ApInfosap=null; ArrayList<ApInfo>sapList=parseAP(result); for(inti=0;i<sapList.size();i++){ if(WifiHandler.isCoveredBy(sapList.get(i),this)){ isCovered=true; sap=sapList.get(i); break; } } if(isCovered){ SignRecordInfosignRecordInfo=newSignRecordInfo(type, System.currentTimeMillis(),gdamApp.getUser()); if(type==Constant.RECORD_TYPE_SIGNIN){ try{ if(SignRecordChecker.addServiceSignRecord( signRecordInfo,sap.getBSSID(), idInfo.getOrgId(),this).equals("1")){ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽到成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽到失敗", Toast.LENGTH_LONG).show(); } }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } }elseif(type==Constant.RECORD_TYPE_SIGNOUT){ try{ if(SignRecordChecker.addServiceSignRecord( signRecordInfo,sap.getBSSID(), idInfo.getOrgId(),this).equals("1")){ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽離成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(GdamActivity.this, "在"+sap.getSSID()+"簽離失敗", Toast.LENGTH_LONG).show(); } }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }else{ Toast.makeText(GdamActivity.this, this.getResources().getString(R.string.setap), Toast.LENGTH_LONG).show(); } } } privateArrayList<ApInfo>parseAP(Stringresult){ ArrayList<ApInfo>aplist=newArrayList<ApInfo>(); Gsongson=newGson();//創(chuàng)立Gson對(duì)象 List<Map<String,Object>>list=gson.fromJson(result,List.class); for(inti=0;i<list.size();i++){ Stringssid=(String)list.get(0).get("SSID"); Stringbssid=(String)list.get(0).get("BSSID"); ApInfosap=newApInfo(ssid,bssid); aplist.add(sap); } returnaplist; } @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){ showDialog(1); returntrue; }else returnsuper.onKeyDown(keyCode,event); } @Override protectedDialogonCreateDialog(intid){ finalGdamApplicationgdamApp=(GdamApplication)this.getApplication(); if(id==1){ returnnewAlertDialog.Builder(this) .setMessage("是否退出程序?") .setTitle("用戶退出") .setPositiveButton("確定", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ gdamApp.onTerminate(); } }) .setNegativeButton("取消", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ dialog.dismiss(); } }).create(); }returnnull;}附錄2//初始化數(shù)據(jù) initView(); privatevoidinitView(){ //獲取輸入的name nameEt=(EditText)findViewById(R._register_name_et); //獲取輸入的id idEt=(EditText)findViewById(R._register_id_et); //頭像按鈕 ((ImageButton)findViewById(R._register_imbtn)) .setOnClickListener(this); //保存按鈕 ((Button)findViewById(R._register_register_bt)) .setOnClickLis

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論