版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
湖南工程學(xué)院畢業(yè)設(shè)計(jì)(論文)緒論研究背景以及意義隨著科學(xué)技術(shù)的發(fā)展,物聯(lián)網(wǎng)已成為當(dāng)今信息技術(shù)當(dāng)中一門(mén)炙手可熱的話題。物聯(lián)網(wǎng)是指通過(guò)各種信息傳感設(shè)備實(shí)時(shí)采集各種需要的信息并與互聯(lián)網(wǎng)結(jié)合形成的一個(gè)大型網(wǎng)絡(luò)。物聯(lián)網(wǎng)的目的在于實(shí)現(xiàn)物與物、物與人以及所有的物品與網(wǎng)絡(luò)的連接,以方便識(shí)別、管理和控制。物聯(lián)網(wǎng)由感知層、網(wǎng)絡(luò)層和應(yīng)用層三層組成。感知層由各種傳感器以及傳感器網(wǎng)關(guān)構(gòu)成,其作用在于識(shí)別物體和采集信息。條形碼技術(shù)是集條碼理論、光電技術(shù)、計(jì)算機(jī)技術(shù)、通信技術(shù)等技術(shù)于一體的綜合性技術(shù)。它具有輸入速度快、可靠性高、采集信息量大、成本低等特點(diǎn),近年來(lái)發(fā)展十分迅速,在國(guó)際上廣泛應(yīng)用于商品流通、物流倉(cāng)儲(chǔ)、信息服務(wù)等各個(gè)領(lǐng)域,極大地提高了生產(chǎn)效率。從尋呼機(jī)到目前3G手機(jī)的面市,中國(guó)人已經(jīng)習(xí)慣了手中的移動(dòng)手機(jī)不停地更新變化。也正是由于這些現(xiàn)實(shí)因素,本課題以理論為基礎(chǔ),方便人們生活,提高工作效率為目的而選擇本課題。QR碼具有可靠性高、信息容量大、保密防偽性高、抗損性強(qiáng)、全方位和超高速識(shí)讀等優(yōu)點(diǎn),而且能高效的表示中國(guó)漢字,適于在中國(guó)的發(fā)展。隨著信息技術(shù)的發(fā)展,條形碼識(shí)別設(shè)備日益智能化、網(wǎng)絡(luò)化和微形化??梢詰?yīng)用于物流、電子商務(wù)、安防、防偽、身份認(rèn)證、商品流通、廣告宣傳等領(lǐng)域。另一方面,Android已成為嵌入式領(lǐng)域尤其是手持終端中第一大嵌入式操作系統(tǒng)。QR碼是矩陣式二維條形碼的代表,它除了具有一維條碼和其它二維條碼所具有的信息容量大、可靠性高等特點(diǎn)外,還具有全方位識(shí)讀、能有效表示中、英、簡(jiǎn)、繁、日、韓等文字、超高速識(shí)讀以及超強(qiáng)的糾錯(cuò)能力和抗干擾能力等特性。適合于我國(guó)的國(guó)情以及漢字編碼的特點(diǎn)。綜上,QR碼在手機(jī)中的應(yīng)用有著良好的前景和潛力它將有效地推動(dòng)移動(dòng)增值業(yè)務(wù)的快速增長(zhǎng)有利于為我國(guó)信息產(chǎn)業(yè)的發(fā)展和經(jīng)濟(jì)建設(shè)帶來(lái)社會(huì)及經(jīng)濟(jì)效益。因此研究基于Android嵌入式平臺(tái)下的條碼識(shí)別有著非常重要的現(xiàn)實(shí)意義。國(guó)內(nèi)外研究與發(fā)展現(xiàn)狀條碼技術(shù)是在信息技術(shù)基礎(chǔ)上發(fā)展起來(lái)的一門(mén)集編碼、印刷、識(shí)別、數(shù)據(jù)采集與處理為一體的綜合性技術(shù)。目前,由于工業(yè)中產(chǎn)生的數(shù)據(jù)信息量不斷增加,傳統(tǒng)的一維條碼技術(shù)已經(jīng)不能滿足社會(huì)的需求,所以二維碼技術(shù)得到廣泛應(yīng)用。隨著內(nèi)置攝像頭手機(jī)的逐漸普及,手機(jī)作為一種數(shù)據(jù)采集設(shè)備使得二維條碼的掃描和識(shí)別變得更加便捷。加密算法通過(guò)密鑰將明文變?yōu)橐欢尾豢芍苯幼x取的代碼。為了使QR碼的識(shí)別更加具有保密性,在為企業(yè)編寫(xiě)的物料智能采制系統(tǒng)中采用DES算法對(duì)數(shù)據(jù)碼字進(jìn)行加密。我國(guó)的條碼自動(dòng)識(shí)別技術(shù)起步比較晚,尤其是二維條碼,但是其發(fā)展很快。目前,二維條碼以其特有的技術(shù)優(yōu)勢(shì)在我國(guó)的許多領(lǐng)域得到了廣泛的應(yīng)用,并且展現(xiàn)出良好的發(fā)展和應(yīng)用前景。在二維條碼的技術(shù)研究與開(kāi)發(fā)方面,為解決我國(guó)漢字表示困難這一難題,我國(guó)在進(jìn)入新世紀(jì)后制定了國(guó)家標(biāo)準(zhǔn)快速響應(yīng)矩陣碼(即QR碼),并在QR碼制中加入了特有的中國(guó)漢字的編碼模式,大大促進(jìn)了二維條碼在我國(guó)的應(yīng)用。二維條碼在應(yīng)用中也存在著一些問(wèn)題,如漢字表示效率低、識(shí)別設(shè)備價(jià)格過(guò)高等等,這些不利因素不同程度的制約著二維條碼技術(shù)在我國(guó)向縱深發(fā)展。為解決這些問(wèn)題,中國(guó)物品編碼中心與許多高校和企業(yè)開(kāi)展了新碼制及國(guó)產(chǎn)識(shí)別設(shè)備的研究。手機(jī)二維條碼技術(shù)在國(guó)外已經(jīng)是一種比較成熟的技術(shù),被廣泛應(yīng)用于日常生活中的信息快速交換領(lǐng)域,如手機(jī)上網(wǎng)、電子門(mén)票等,這些場(chǎng)景在亞太區(qū)的日本、韓國(guó)和我國(guó)的香港地區(qū)得到了大規(guī)模的應(yīng)用。手機(jī)二維條碼在我國(guó)的應(yīng)用比較晚,最初是由中國(guó)移動(dòng)于2006年8月開(kāi)始推出的,首先在北京和上海兩地進(jìn)行測(cè)試,然后逐漸推廣到全國(guó),從此二維條碼成為了業(yè)界關(guān)注的焦點(diǎn)。目前,我國(guó)在該技術(shù)領(lǐng)域方面的應(yīng)用都還還遠(yuǎn)談不上成熟,國(guó)內(nèi)企業(yè)應(yīng)該抓住商機(jī),加大投入力度,推動(dòng)整個(gè)行業(yè)的發(fā)展。二維條碼是一種由黑白相間的模塊按照一定規(guī)律在水平和垂直兩個(gè)方向上組成的幾何圖形,利用這些黑白相間的模塊來(lái)達(dá)到記錄信息的目的"在代碼編制上,二維條碼中的黑白模塊與計(jì)算機(jī)邏輯中的0,1相互對(duì)應(yīng),使用若干個(gè)二進(jìn)制相對(duì)應(yīng)的幾何圖形來(lái)表示數(shù)據(jù)信息,通過(guò)圖像輸入設(shè)備或光電掃描設(shè)備自動(dòng)識(shí)讀便可以實(shí)現(xiàn)信息的自動(dòng)化處理。和其他自動(dòng)化識(shí)別技術(shù)相比,二維條碼有其獨(dú)特的優(yōu)勢(shì)。在條碼的應(yīng)用方面,美國(guó)、日本、韓國(guó)等國(guó)家已經(jīng)將二維條碼技術(shù)應(yīng)用于對(duì)各類證件、報(bào)表、票據(jù)、郵寄包裹!生產(chǎn)線的管理等;在標(biāo)準(zhǔn)化研究方面,國(guó)際標(biāo)準(zhǔn)化組織/國(guó)際電工委員會(huì)定了DF417、DataMatrix、Maxicode、QR碼等二維條碼的國(guó)際標(biāo)準(zhǔn);在條碼識(shí)讀設(shè)備的開(kāi)發(fā)研制和生產(chǎn)方面,美國(guó)的SY入4BOL!Zebra,日本的OPtion等設(shè)備制造商生產(chǎn)的識(shí)讀設(shè)備和符號(hào)生成設(shè)備已經(jīng)廣泛應(yīng)用于各類應(yīng)用系統(tǒng)。可以說(shuō),基于Android平臺(tái)的二維碼識(shí)別的相關(guān)軟件的出爐,方便了廣大手機(jī)消費(fèi)者的生活,為用戶行為提供了便捷性。因此,二維碼識(shí)別技術(shù)在安卓手機(jī)上應(yīng)用其前景明朗,對(duì)相關(guān)理論及科學(xué)技術(shù)的研究的影響意義也十分深遠(yuǎn)。1.3論文主要研究?jī)?nèi)容該軟件基于Android開(kāi)發(fā)平臺(tái)在windows環(huán)境下采用面向?qū)ο蠓椒ㄟM(jìn)行開(kāi)發(fā)。嚴(yán)格按照軟件工程思想,按照需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試分階段完成整個(gè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。首先,進(jìn)行需求分析和可行性分析。然后,在概要設(shè)計(jì)中建立了系統(tǒng)功能模型,并在詳細(xì)設(shè)計(jì)階段對(duì)圖片處理過(guò)程進(jìn)行設(shè)計(jì)。最后,對(duì)軟件進(jìn)行編碼和測(cè)試。該軟件實(shí)現(xiàn)對(duì)二維碼的掃描與識(shí)別,具有很強(qiáng)的實(shí)用性。設(shè)計(jì)實(shí)現(xiàn)的主要功能應(yīng)包括:能夠通過(guò)攝像頭掃描識(shí)別QRCODE二維碼。若二維碼隱藏的是網(wǎng)址信息,那么調(diào)用手機(jī)瀏覽器瀏覽該網(wǎng)站。若二維碼隱藏的是網(wǎng)址信息,那么調(diào)用手機(jī)撥打電話功能。若二維碼隱藏的普通文本信息,那么顯示該文本信息即可。二維碼其他拓展功能。課題相關(guān)理論與技術(shù)2.1二維碼技術(shù)原理二維碼作為一種全新的條碼技術(shù),已被廣泛應(yīng)用于國(guó)防、醫(yī)療保健、商業(yè)、金融、后勤管理等領(lǐng)域。由于QRCode二維碼信息容量大,保密性能好,并且成本低,適合我國(guó)人口眾多,計(jì)算機(jī)建設(shè)還不是很完善的國(guó)情,因此在我國(guó)有著十分廣闊的應(yīng)用前景。可以預(yù)見(jiàn),二維條碼技術(shù)在我國(guó)的推廣上應(yīng)用必將為我國(guó)信息產(chǎn)業(yè)的發(fā)展和現(xiàn)代化的經(jīng)濟(jì)建設(shè)帶來(lái)可觀的社會(huì)效益和經(jīng)濟(jì)效益。二維碼(2-dimensionalbarcode),是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的。在許多種類的二維條碼中,常用的碼制有:DataMatrix、MaxiCode、Aztec、QRCode、Vericode、PDF417、Ultracode、Code49、Code16K等。1)堆疊式/行排式二維條碼,如,Code16K、Code49、PDF417等。2)矩陣式二維碼,最流行莫過(guò)于QRCODE。QR(Quick-Response)code是被廣泛使用的一種二維碼,解碼速度快。它可以存儲(chǔ)多用類型?,F(xiàn)在使用的QRCODE二位條形碼的規(guī)范一直遵循OMIA(OpenMobileInternetAlliance)的規(guī)范,QRCode基本結(jié)構(gòu)如圖2.1所示。圖2.1QRCode基本結(jié)構(gòu)其中:位置探測(cè)圖形、位置探測(cè)圖形分隔符和定位圖形用于對(duì)二維碼的定位;對(duì)每個(gè)QR碼來(lái)說(shuō),位置都是固定存在的,只是大小規(guī)格會(huì)有所差異;規(guī)格確定,校正圖形的數(shù)量和位置也就確定了;格式信息表示改二維碼的糾錯(cuò)級(jí)別,分為L(zhǎng)、M、Q、H;版本信息即二維碼的規(guī)格,QR碼符號(hào)共有40種規(guī)格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號(hào)比前一版本每邊增加4個(gè)模塊。數(shù)據(jù)和糾錯(cuò)碼字實(shí)際保存的二維碼信息和糾錯(cuò)碼字(用于修正二維碼損壞帶來(lái)的錯(cuò)誤)。簡(jiǎn)要的解碼過(guò)程:二維碼圖像->圖像解析出01編碼->按照規(guī)則解釋為相應(yīng)的內(nèi)容。2.2Android手機(jī)平臺(tái)2.2.1Android簡(jiǎn)介Android是“機(jī)器人”的意思,是Google公司于2007年11月5日發(fā)布的一個(gè)基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。該系統(tǒng)由底層的Linux操作系統(tǒng)、中間件和核心應(yīng)用程序組成。Android應(yīng)用程序由強(qiáng)大的java語(yǔ)言編寫(xiě),也支持其他一些語(yǔ)言,如C、Perl等。Google于2007年11月5日發(fā)布了Android1.0手機(jī)操作系統(tǒng),號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件,后經(jīng)版本不斷更新,到現(xiàn)在最新版本是Android4.3。同日,Google宣布組建了一個(gè)全球性的聯(lián)盟組織。這一聯(lián)盟將會(huì)支持Google可能發(fā)布的手機(jī)操作系統(tǒng)或者應(yīng)用軟件,共同開(kāi)發(fā)名為Android的開(kāi)放源代碼的移動(dòng)系統(tǒng)。開(kāi)放手機(jī)聯(lián)盟包括手機(jī)制造商、手機(jī)芯片廠商和移動(dòng)運(yùn)營(yíng)商幾類。目前,聯(lián)盟成員數(shù)量已經(jīng)超過(guò)80家。移動(dòng)運(yùn)營(yíng)商包括中國(guó)移動(dòng)、中國(guó)電信、中國(guó)聯(lián)通、美國(guó)SprintNextel、德國(guó)T-Moblile等,半導(dǎo)體制造商包括ARM、英特爾、高通等;電話制造商包括摩托羅拉、三星、LG、華為、HTC等。2.2.2Android平臺(tái)特點(diǎn)Android是一個(gè)專門(mén)針對(duì)移動(dòng)設(shè)備的軟件集,它包括一個(gè)底層Linux操作系統(tǒng),中間層的中間件和上層的java應(yīng)用程序。Android平臺(tái)的開(kāi)發(fā)特點(diǎn)如下:(1)應(yīng)用程序框架支持組件的重用與替換。這在之前的手機(jī)操作系統(tǒng)當(dāng)中是很難想象的。這意味著我們可以把系統(tǒng)中不喜歡的應(yīng)用程序替換掉,安裝我們喜歡的應(yīng)用程序。(2)Dalvik虛擬機(jī)專門(mén)為移動(dòng)設(shè)備做了優(yōu)化。Android應(yīng)用程序?qū)⒂蒵ava編寫(xiě)、編譯的類文件通過(guò)DX工具轉(zhuǎn)換成一種后綴名為.dex的文件來(lái)執(zhí)行。Dalvik虛擬機(jī)是基于寄存器的,相對(duì)于java虛擬機(jī)要快很多。(3)內(nèi)部集成瀏覽器基于開(kāi)源的WebKit引擎。有了內(nèi)置的瀏覽器,這將意味著WAP應(yīng)用的時(shí)代即將結(jié)束,真正的移動(dòng)互聯(lián)網(wǎng)時(shí)代已經(jīng)來(lái)臨,手機(jī)就是一臺(tái)“小電腦”,可以在網(wǎng)上隨意遨游。(4)優(yōu)化了圖形庫(kù)包括2D和3D圖形庫(kù),3D圖形庫(kù)基于OpenGLES1.0。強(qiáng)大的圖形庫(kù)給游戲開(kāi)發(fā)帶來(lái)福音。(5)SQList用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。(6)多媒體支持包括常用的音頻、視頻和靜態(tài)印象文件格式(如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)。(7)GSM電話(8)藍(lán)牙,EDGE,3G,WIFI。(9)照相機(jī),GPS,指南針和加速計(jì)。(10)豐富的開(kāi)發(fā)環(huán)境包括設(shè)備模擬器、調(diào)試工具,內(nèi)存及性能分析圖表和Eclipse集成開(kāi)發(fā)環(huán)境插件。開(kāi)發(fā)者完全可以訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來(lái)簡(jiǎn)化組件軟件的重用,任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其他的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)的遵循框架的安全限制)。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換。以下所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:一個(gè)可擴(kuò)展的視圖(View)可以用來(lái)創(chuàng)建應(yīng)用程序,包括列表(lists)、網(wǎng)絡(luò)(grids)、文本框(textboxes)、按鈕(buttons),甚至是一個(gè)可嵌入的Web瀏覽器。內(nèi)容管理器(ContentProviders)使用應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如:聯(lián)系人數(shù)據(jù)庫(kù)),或者共享它們自己的數(shù)據(jù)。一個(gè)資源管理器(ResourceManager)提供非代碼資源的訪問(wèn),如:本地字符串、圖形何分層文件(layoutfiles).一個(gè)通知管理器(NotificationManager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。一個(gè)活動(dòng)類管理器(ActivityManager)用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。Android包括一個(gè)被Android系統(tǒng)中各種不同組件所使用的C/C++庫(kù)集。該庫(kù)集通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)。以下是一些主要的核心庫(kù)。系統(tǒng)C庫(kù):一個(gè)從BSD繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)數(shù)據(jù)庫(kù)(libc),專門(mén)為基于EmbeddedLinux的設(shè)備定制。媒體庫(kù):基于PacketVideoOpenCORE:該庫(kù)支持錄放,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)映像文件包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。SurfaceManager:對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供2D和3D圖層的無(wú)縫融合。LibWebCore:一個(gè)最新的Web瀏覽器引擎,用來(lái)支持Android瀏覽器和一個(gè)可嵌入的Web視圖。SGL:一個(gè)內(nèi)置的2D圖形引擎。3Dlibraries:基于OpenGLES1.0APIs實(shí)現(xiàn):該庫(kù)可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。FreeType:位圖(bitmap)和向量(vector)字體顯示。SQLite:一個(gè)對(duì)于所有應(yīng)用程序可用、功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎。Android包括了一個(gè)核心庫(kù),該核心庫(kù)提供了Java編程語(yǔ)言核心庫(kù)的大多數(shù)功能。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對(duì)同時(shí)高效地運(yùn)行多個(gè)VMs來(lái)實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對(duì)最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類都經(jīng)過(guò)由Java匯編器編譯,然后通過(guò)SDK中的DX工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。2.3Android系統(tǒng)結(jié)構(gòu)組成分析2.3.1Android系統(tǒng)架構(gòu)Android系統(tǒng)由底層到應(yīng)用層的系統(tǒng)結(jié)構(gòu)如圖2.2所示,下面由底層逐步向上做一個(gè)簡(jiǎn)單的介紹。圖2.2Android系統(tǒng)框架圖Android的內(nèi)核采用Linux內(nèi)核版本2.6,其位于硬件和軟件堆之間的抽象層,提供的核心服務(wù):安全機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)、硬件驅(qū)動(dòng)。除了標(biāo)準(zhǔn)的Linux內(nèi)核外,Android系統(tǒng)還需要增加內(nèi)核驅(qū)動(dòng)。例如:BinderIPC驅(qū)動(dòng)、顯示驅(qū)動(dòng)、輸入設(shè)備驅(qū)動(dòng)、音頻系統(tǒng)驅(qū)動(dòng)、攝像頭驅(qū)動(dòng)、Wifi驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)、電源管理驅(qū)動(dòng)等。這些內(nèi)容為Android系統(tǒng)的運(yùn)行提供了基礎(chǔ)性支持。Android也適合使用Linux的標(biāo)準(zhǔn)驅(qū)動(dòng)作為系統(tǒng)于硬件的接口,但是這個(gè)操作系統(tǒng)并非完全等同于unix/linux系統(tǒng)庫(kù),系統(tǒng)初始化和編程接口都和標(biāo)準(zhǔn)的Linux系統(tǒng)是有所不同的。Android內(nèi)核要實(shí)現(xiàn)內(nèi)存管理、進(jìn)程調(diào)度、進(jìn)程間通信等功能Android內(nèi)核是在標(biāo)準(zhǔn)Linux內(nèi)核的基礎(chǔ)上修改成為了適應(yīng)嵌入式硬件環(huán)境和移動(dòng)應(yīng)用程序的開(kāi)發(fā),Android對(duì)標(biāo)準(zhǔn)Linux內(nèi)核進(jìn)行了一定的修改為了對(duì)比分析Android內(nèi)核,在Ubuntu操作系統(tǒng)上搭建了Android內(nèi)核的編譯開(kāi)發(fā)平臺(tái),通過(guò)repo,下載最新的Android內(nèi)核代碼版本Linux內(nèi)核版本為2.6.29。從獲得的內(nèi)核源碼樹(shù)的根目錄結(jié)構(gòu)。經(jīng)過(guò)與unix標(biāo)準(zhǔn)內(nèi)核比較可以發(fā)現(xiàn),Android內(nèi)核與標(biāo)準(zhǔn)Linux內(nèi)核在文件系統(tǒng)、進(jìn)程間通信機(jī)制、內(nèi)存管理等方面存在不同。(1)文件系統(tǒng)不同于桌面系統(tǒng)與服務(wù)器,移動(dòng)設(shè)備大多采用的不是硬盤(pán)而是采用flash作為存儲(chǔ)介質(zhì),因此,Android內(nèi)核中,增加了標(biāo)準(zhǔn)Linux內(nèi)核,采用日志結(jié)構(gòu)的文件系統(tǒng),提供了損耗平衡和掉電保護(hù),可以有效地避免意外斷電對(duì)文件系統(tǒng)一致性和完整性的影響。按層次結(jié)構(gòu)設(shè)計(jì),分為文件管理接口、內(nèi)部實(shí)現(xiàn)層和HAND,簡(jiǎn)化了其本身與系統(tǒng)的接口設(shè)計(jì),能更方便地集成到系統(tǒng)當(dāng)中。(2)進(jìn)程間通信機(jī)制Android增加了一種進(jìn)程間的通信機(jī)制在內(nèi)核源代碼驅(qū)動(dòng)程序文件為、oredroid/includellinux/binder.h和oredroid/drivers/Android/binder,Binder通過(guò)守護(hù)進(jìn)程ServiceManager管理系統(tǒng)的服務(wù),負(fù)責(zé)進(jìn)程間的數(shù)據(jù)交換各進(jìn)程通過(guò)Binder訪問(wèn)同一塊共享內(nèi)存,以達(dá)到數(shù)據(jù)通信的機(jī)制從應(yīng)用層的角度看,進(jìn)程通過(guò)訪問(wèn)數(shù)據(jù)守護(hù)進(jìn)程獲取用于數(shù)據(jù)交換的程序框架接口,調(diào)用并通過(guò)接口共享數(shù)據(jù),而其他進(jìn)程要訪問(wèn)數(shù)據(jù),也只需與程序框架接口進(jìn)行交互,方便了程序員開(kāi)發(fā)需要交互數(shù)據(jù)的應(yīng)用程序。(3)內(nèi)存管理在內(nèi)存管理模塊,Android內(nèi)核采用了一種不用于標(biāo)準(zhǔn)Linux內(nèi)核的低內(nèi)存管理策略,在標(biāo)準(zhǔn)Linux內(nèi)核使用一種叫做OOM(OutofMemory)的低內(nèi)存管理策略;當(dāng)內(nèi)存不足時(shí),系統(tǒng)檢查所有的進(jìn)程,并對(duì)進(jìn)程進(jìn)行限制評(píng)分,獲得最高分的進(jìn)程將被關(guān)閉(內(nèi)核進(jìn)程除外)Android系統(tǒng)采用的則是一種叫作LMK(LowMemoryKiller)的機(jī)制,這種機(jī)制將進(jìn)程按照重要性進(jìn)行分級(jí)、分組內(nèi)存不足時(shí),將處于最低級(jí)別組的進(jìn)程關(guān)閉例如,在移動(dòng)設(shè)備當(dāng)用戶界面處于最高級(jí)別,所以該進(jìn)程永遠(yuǎn)不會(huì)被關(guān)閉這樣,在終端用戶看來(lái),系統(tǒng)是穩(wěn)定運(yùn)行的在Andorid內(nèi)核源碼LMK的位置是oredroid/drivers/mist/lowme-morykiller.c。與此同時(shí),Android新增加了一種內(nèi)存共享的處理方式Ashmem(AnonymousSharedMemory,匿名共享內(nèi)存)通過(guò)Ashmem,進(jìn)程間可以匿名自由共享具名的內(nèi)存塊。這種共享方式在標(biāo)準(zhǔn)Linux當(dāng)中不被支持。C/C++庫(kù)被各種Android組件使用并且通過(guò)應(yīng)用程序框架開(kāi)發(fā)者可以使用其功能,這些功能包括單不限于:媒體庫(kù)如MPEG4、H.264、MP3、JPG、PNG等;WebKit/LibWebCoreWeb瀏覽引擎;SQLite關(guān)系數(shù)據(jù)庫(kù)引擎;2D,3D圖形庫(kù)、引擎;Android有豐富的類庫(kù)支持,包括:2D和3D圖像庫(kù)OpenGL、數(shù)據(jù)庫(kù)SQLite、對(duì)象數(shù)據(jù)庫(kù)db類庫(kù)、媒體庫(kù)、基本linux底層系統(tǒng)C庫(kù)等等,讓?xiě)?yīng)用開(kāi)發(fā)更簡(jiǎn)單多樣。Google使用Apache的Harmony類庫(kù),Harmony某些方面速度快于Sun的VMoRuntime在DalvikJavaVM上,Dalvik采用簡(jiǎn)練、高效的bytecode格式運(yùn)行,它能夠在低資耗和沒(méi)有應(yīng)用相互干擾的情況下并行執(zhí)行多個(gè)應(yīng)用。其在運(yùn)行時(shí)的主要特點(diǎn)有:每一個(gè)Android應(yīng)用程序在它自己的DalvikVM實(shí)例中運(yùn)行VM執(zhí)行優(yōu)化的Dalvik可執(zhí)行文件(.dex)。Dx工具把編譯過(guò)的Java文件轉(zhuǎn)換為dex文件核心庫(kù)提供的Java功能,Dalvik虛擬機(jī)依賴于Linux內(nèi)核,例如線程或底層內(nèi)存管理。設(shè)備可以運(yùn)行多個(gè)Dalvik虛擬機(jī)。Android應(yīng)用層包括Android核心應(yīng)用,它主要簡(jiǎn)化組件的重用,盡管內(nèi)核適用c/c++程序庫(kù),但是在應(yīng)用層開(kāi)發(fā)時(shí),使用Java編寫(xiě)應(yīng)用程序,例如聯(lián)系人,電子郵件,電話,瀏覽器,日歷,地圖,此層次上有充分訪問(wèn)所有核心應(yīng)用框架API。2.4Android開(kāi)發(fā)工具2.4.1Eclipse簡(jiǎn)介Eclipse是一個(gè)綜合開(kāi)發(fā)環(huán)境(IntegratedDevelopmentEnvironment)IDE,它是一個(gè)功能完整且成熟的軟件,由IBM公司于2001年首次推出。大家可以在其官方網(wǎng)站免費(fèi)下載該軟件的打包文件,釋放到文件夾即可使用。Eclipse是一個(gè)開(kāi)放源代碼、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。開(kāi)放源代碼的意思是讓使用者能夠取得軟件的原始碼,部分地有權(quán)去修改和傳播這個(gè)軟件。有人非常形象地將Eclipse比喻成軟件開(kāi)發(fā)者的“打鐵鋪”,它一開(kāi)始備有火爐、鐵砧與鐵錘。就像鐵匠會(huì)用現(xiàn)有的工具打造新的工具一樣,程序員也能用Eclipse打造新工具來(lái)開(kāi)發(fā)軟件———這些新工具可擴(kuò)充Eclipse的功能。就Eclipse本身而言,它只是一個(gè)框架和一組被稱為平臺(tái)核心的服務(wù)程序,用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。核心的任務(wù)是讓每樣?xùn)|西動(dòng)起來(lái),并加載所需的外掛程序。當(dāng)啟動(dòng)Eclipse時(shí),先執(zhí)行的就是這個(gè)組件,再由這個(gè)組件加載其他外掛程序。Eclipse附帶了一個(gè)包括Java開(kāi)發(fā)工具(JavaDevelopmentTools,JDT)的標(biāo)準(zhǔn)插件集,因此如果要使用Eclipse來(lái)開(kāi)發(fā)Java程序,必須安裝JDK作為它的插件才能使它正常運(yùn)作。2.4.2JDK簡(jiǎn)介JDK(JavaDevelopmentKit,JDK)是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(JavaRuntimeEnvirnment),一堆Java工具和Java基礎(chǔ)的類庫(kù)(rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK等等。其中IBM的JDK包含的JVM(JavaVirtualMachine,JVM)運(yùn)行效率要比SunJDK包含的JVM高出許多。JDK的最重要命令行工具:java:?jiǎn)?dòng)JVM執(zhí)行class;javac:Java編譯器;jar:Java打包工具;javadoc:Java文檔生成器。2.4.3AndroidSDK簡(jiǎn)介AndroidSDK(softwaredevelopmentkit,SDK)Tool軟件開(kāi)發(fā)工具包。被軟件開(kāi)發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件的開(kāi)發(fā)工具的集合,是Android專屬的軟件開(kāi)發(fā)工具包。2.4.4ADT簡(jiǎn)介目前Android開(kāi)發(fā)所用的開(kāi)發(fā)工具是Eclipse,在Eclipse編譯IDE環(huán)境中,安裝ADT,為Android開(kāi)發(fā)提供開(kāi)發(fā)工具的升級(jí)或者變更,簡(jiǎn)單理解為在Eclipse下開(kāi)發(fā)工具的升級(jí)下載工具。2.5開(kāi)發(fā)環(huán)境搭建2.5.1下載和安裝AndroidSDK登陸Android開(kāi)發(fā)者網(wǎng)站http://developer.A/sdk/index.html即可下載AndroidSDK。下載和安裝步驟如下:在Android1.5之前,Google提供了AndroidSDK的完整開(kāi)發(fā)包;從Android1.6之后,Google不再提供完整開(kāi)發(fā)包,開(kāi)發(fā)者必須采用在線的方式安裝AndroidSDK。此處以Windows開(kāi)發(fā)平臺(tái)為例,登陸界面之后點(diǎn)擊“Android-sdk_r18-windows.zip”連接,通過(guò)連接即可下載AndroidSDK的在線安裝包。下載完成后得到Android-sdk_r18-windows.zip文件。將該文件解壓到任意路徑,解壓后文件夾,啟動(dòng)文件夾中SDKManager.exe,單擊出現(xiàn)窗口左邊“Installedpackages”項(xiàng),可以查看已有安裝工具,單擊“Availablepackages”然后選安裝工具,其中Android平臺(tái)工具、Android文檔、Android2.3SDK必須選,然后單擊“InstallSelected”,窗口出現(xiàn)“AcceptAll”單選按鈕,單擊“Install”系統(tǒng)便開(kāi)始安裝AndroidSDK,安裝時(shí)間可能要花費(fèi)一兩個(gè)小時(shí)。2.5.2安裝Eclipse和ADT插件Eclipse是一個(gè)市場(chǎng)占有率很高的JavaIDE工具,JavaEE應(yīng)用的開(kāi)發(fā)者對(duì)Eclipse應(yīng)該十分熟悉,Android推薦使用Eclipse來(lái)開(kāi)發(fā)Android應(yīng)用,并為它提供專門(mén)的插件ADT(AndroidDevelopmentTools,ADT)。安裝Eclipse工具按如下步驟進(jìn)行:登陸站點(diǎn),下載EclipseIDEforJavaEEDeveloper的版本。下載完成后解壓縮后雙擊eclipse.exe文件,即可看到Eclipse啟動(dòng)界面,表明Eclipse已經(jīng)安裝成功,為了在Eclipse中進(jìn)行Android開(kāi)發(fā),還需要安裝ADT插件。安裝ADT請(qǐng)按如下步驟進(jìn)行登陸下載:登陸網(wǎng)站:http://developer.A/sdk/eclipse-adt.html#installing下載ADT插件最新版本,下載后得到ADT-18.0.0.zip文件。啟動(dòng)Eclipse,單擊Eclipse的主菜單上Help/InstallNewSoftware菜單項(xiàng),單擊窗口“Add..”按鈕,選擇ADT插件ADT-18.0.0.zip文件。選中“OK”按鈕,在點(diǎn)擊“next”,最后點(diǎn)擊“Finish”,Eclipse開(kāi)始安裝ADT插件。稍稍等幾分鐘,ADT插件安裝完成再配置相應(yīng)環(huán)境變量即可進(jìn)行Android軟件開(kāi)發(fā)了。可行性研究與需求分析3.1可行性研究一個(gè)項(xiàng)目的開(kāi)發(fā)需要仔細(xì)分析,看它在目前的情況下是否可行,如果一個(gè)項(xiàng)目開(kāi)發(fā)具有很好的背景和意義,但是在經(jīng)濟(jì)上或者是技術(shù)上是不可行的,那么它也只能稱之為不能實(shí)現(xiàn)的項(xiàng)目。通過(guò)參照現(xiàn)有相似的其他網(wǎng)站的使用效果和分析實(shí)例進(jìn)行可行性研究,主要從以下四個(gè)方面進(jìn)行討論。3.1.1技術(shù)可行性本次開(kāi)發(fā)的Android二維碼掃描識(shí)別軟件,用戶通過(guò)手機(jī)對(duì)QRcode二維碼進(jìn)行拍照解碼識(shí)別并且顯示二維碼隱藏的信息,如果二維碼為“http://”,則打開(kāi)手機(jī)瀏覽器直接上網(wǎng);當(dāng)發(fā)現(xiàn)為“wtai://”或“TEL:”規(guī)范,則調(diào)用手機(jī)撥打電話;而若未發(fā)現(xiàn)任何標(biāo)準(zhǔn)規(guī)范,則顯示條形碼的文字。如果拍照的圖片不是QRcode二維碼條形碼或者程序無(wú)法識(shí)別,則不作任何處理。首先我們需要借助一個(gè)第三方的庫(kù)函數(shù)QRCODE.jar.然后我們可以通過(guò)手機(jī)照相機(jī)獲取二維碼圖片,然后將其送往QRCode的函數(shù)進(jìn)行解碼,對(duì)比我們的OMIA規(guī)范,即可實(shí)現(xiàn),因此在技術(shù)上可行。3.1.2經(jīng)濟(jì)可行性二維碼在國(guó)內(nèi)應(yīng)用引起眾多用戶群體的興趣,國(guó)內(nèi)許多廠商已經(jīng)開(kāi)始致力于二維碼的研究,設(shè)備開(kāi)發(fā)與應(yīng)用系統(tǒng)的應(yīng)用推廣及新市場(chǎng)的培育,投資方很看好這個(gè)項(xiàng)目,在資金方面沒(méi)有問(wèn)題,所以在經(jīng)濟(jì)上可行。3.1.3操作可行性通過(guò)對(duì)Android二維碼掃描識(shí)別的研究,本系統(tǒng)能滿足投資方的基本要求,同時(shí)由于本系統(tǒng)只需要有一臺(tái)Android手機(jī)即可對(duì)QRcode二維碼進(jìn)行掃描識(shí)別、在操作方面可行。3.1.4社會(huì)可行性本軟件可以讓用戶通過(guò)手機(jī)對(duì)一些產(chǎn)品上的二維碼進(jìn)行掃描識(shí)別,從而查看該產(chǎn)品的真?zhèn)?。?duì)社會(huì)幫助很大。根據(jù)以上幾個(gè)方面的研究分析,Android二維碼的掃描識(shí)別在技術(shù)上可行、經(jīng)濟(jì)方面可行、操作方面可行、法律方面也是可行的,可得出結(jié)論:應(yīng)該立即進(jìn)行本項(xiàng)目的開(kāi)發(fā)。3.2需求分析需求分析是軟件定義的最后一個(gè)階段,它的基本任務(wù)是回答“系統(tǒng)必須做什么”這個(gè)問(wèn)題。需求分析的任務(wù)不是確定系統(tǒng)怎樣完成他的工作,而僅僅是確定系統(tǒng)完成哪些工作,也就是對(duì)目標(biāo)系統(tǒng)提出完整、準(zhǔn)確、清晰、具體的要求??尚行匝芯侩A段產(chǎn)生的文檔,是需求分析的出發(fā)點(diǎn)。從需求分析中已經(jīng)劃分出系統(tǒng)必須完成的許多基本功能,系統(tǒng)分析員將仔細(xì)研究這些功能并進(jìn)一步將它們具體化。需求分析的結(jié)果是系統(tǒng)開(kāi)發(fā)的基礎(chǔ),關(guān)系到工程的成敗和軟件產(chǎn)品的質(zhì)量。因此,必須用行之有效的方法對(duì)軟件需求進(jìn)行嚴(yán)格的審查驗(yàn)證。本系統(tǒng)的實(shí)現(xiàn)要考慮到很多方面的因素,因此要求的方法和技術(shù)要相應(yīng)的有些多。具體來(lái)說(shuō),在開(kāi)發(fā)過(guò)程中,要熟悉QRcode二維碼解碼和圖像處理的方法,能熟練運(yùn)用JAVA語(yǔ)言,還要懂得軟件工程技術(shù)和系統(tǒng)測(cè)試技術(shù)。由于此系統(tǒng)的開(kāi)發(fā)是在XP環(huán)境下借助JDK、Eclipse、ADT和SDK完成的,所以還應(yīng)熟練使用XP和這些開(kāi)發(fā)工具。3.2.1系統(tǒng)功能需求(1)相機(jī)預(yù)覽需求此二維碼識(shí)別系統(tǒng)必須能夠調(diào)用手機(jī)上的照相機(jī)才能獲取二維碼的圖像,因此需要一個(gè)相機(jī)預(yù)覽功能,之后才能獲取我們的二維碼圖片。(2)關(guān)閉相機(jī)預(yù)覽需求此系統(tǒng)既然要打開(kāi)手機(jī)照相機(jī),當(dāng)然也能夠關(guān)閉相機(jī)預(yù)覽功能。(3)圖像處理和拍照解碼需求既然此系統(tǒng)是要對(duì)二維碼識(shí)別,我們通過(guò)相機(jī)預(yù)覽后即可進(jìn)行拍照截取圖片,然后對(duì)圖片進(jìn)行處理,同時(shí)需要對(duì)二維碼解碼,因此需要有圖像處理和解碼的功能。(4)調(diào)用瀏覽器功能當(dāng)我們二維碼隱藏的是一個(gè)網(wǎng)站信息時(shí),我們需要訪問(wèn)該網(wǎng)站,那么我們這時(shí)候需要調(diào)用我們手機(jī)瀏覽器功能。(5)調(diào)用手機(jī)撥打電話功能當(dāng)我們二維碼隱藏的是一個(gè)電話號(hào)碼時(shí),這個(gè)時(shí)候我們需要調(diào)用我們手機(jī)撥打電話功能。(6)其他功能顯示文本功能:當(dāng)二維碼隱藏的只是一些文本信息的時(shí)候能夠文本信息顯示出來(lái)。3.2.2系統(tǒng)功能結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)圖是對(duì)軟件系統(tǒng)結(jié)構(gòu)的總體設(shè)計(jì)的圖形顯示,在需求分析階段,已經(jīng)從系統(tǒng)開(kāi)發(fā)的角度出發(fā),把系統(tǒng)按功能逐次分割成層次結(jié)構(gòu),使每一部分完成簡(jiǎn)單的功能且各個(gè)部分之間又保持一定的聯(lián)系,這就是功能設(shè)計(jì)。在設(shè)計(jì)階段,基于這個(gè)功能的層次結(jié)構(gòu)把各個(gè)部分組合起來(lái)成為系統(tǒng)。如圖3.1所示。圖3.1系統(tǒng)功能結(jié)構(gòu)圖3.2.3系統(tǒng)用例圖(1)系統(tǒng)用戶用例圖用例圖就是由主角、用例以及它們之間的關(guān)系構(gòu)成的圖。該圖說(shuō)明了用例模型中的關(guān)系。通過(guò)上面對(duì)系統(tǒng)的分析即可得到系統(tǒng)的用例圖,如圖3.2所示。圖3.2系統(tǒng)用例圖(2)相機(jī)預(yù)覽用例:調(diào)用手機(jī)照相機(jī)初始化相機(jī)模式。(3)關(guān)閉相機(jī)用例:關(guān)閉手機(jī)照相機(jī)。(4)拍照解碼用例:通過(guò)手機(jī)照相機(jī)把二維碼圖片拍下來(lái)然后再送入系統(tǒng)解碼。1)調(diào)用瀏覽器用例:如果二維碼信息隱藏的是以“http://”開(kāi)頭的網(wǎng)址,那么手機(jī)便調(diào)用默認(rèn)瀏覽器瀏覽該網(wǎng)站。2)調(diào)用撥打電話功能用例:如果二維碼信息隱藏的是以“TEL:”或者是“wtai://”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能。3)顯示文本信息用例:如果二維碼信息只是包含一些文本信息,那么直接顯示。3.2.4系統(tǒng)活動(dòng)圖活動(dòng)圖(activitydiagram,動(dòng)態(tài)圖)是闡明了業(yè)務(wù)用例實(shí)現(xiàn)的工作流程。業(yè)務(wù)用例工作流程說(shuō)明了業(yè)務(wù)為向所服務(wù)的業(yè)務(wù)主角提供其所需的價(jià)值而必須完成的工作。業(yè)務(wù)用例由一系列活動(dòng)組成,它們共同為業(yè)務(wù)主角生成某些工件。工作流程通常包括一個(gè)基本工作流程和一個(gè)或多個(gè)備選工作流程。工作流程的結(jié)構(gòu)使用活動(dòng)圖來(lái)進(jìn)行說(shuō)明。系統(tǒng)的活動(dòng)圖如圖3.3所示。圖3.3系統(tǒng)活動(dòng)圖3.3技術(shù)需求Android二維碼掃描系統(tǒng)是一個(gè)綜合性比較強(qiáng)的題目,它需要在學(xué)校學(xué)習(xí)多方面知識(shí),具體的幾個(gè)主要技術(shù)要求如下:(1)Android技術(shù)Android開(kāi)發(fā)之前,需要配置Android開(kāi)發(fā)環(huán)境。首先,Android開(kāi)發(fā)所需要的開(kāi)發(fā)包和工具,以及獲得它們的方式;其次,如何正確安裝和配置這些開(kāi)發(fā)包;最后,為了測(cè)試安裝的開(kāi)發(fā)環(huán)境,創(chuàng)建了第一個(gè)Android項(xiàng)目--HelloAndroid,并在模擬器上運(yùn)行和調(diào)試該程序,并且將該應(yīng)用程序安裝到Android手機(jī)上。(2)照相機(jī)實(shí)現(xiàn)技術(shù)在了解了Android開(kāi)發(fā)的過(guò)程之后需要學(xué)習(xí)Android怎樣進(jìn)行照相。Android應(yīng)用提供了Camera來(lái)控制拍照,使用Camera進(jìn)行拍照需要按照如下步驟進(jìn)行即可.調(diào)用Camera的open()方法打開(kāi)照相機(jī)。調(diào)用Camera和getParameters()方法獲取拍照參數(shù)。該方法返回一個(gè)Camera.Parameters對(duì)象。調(diào)用Camera.Parameters對(duì)象方法設(shè)置相機(jī)參數(shù)。調(diào)用Camera的setParameters(),并將Camera.Parameters對(duì)象作為參數(shù)傳入,這樣即可對(duì)相機(jī)的拍照參數(shù)進(jìn)行控制。調(diào)用Camera的startPreview()方法開(kāi)始預(yù)覽取景,在預(yù)覽取景之前需要調(diào)用Camera的setPreviewDisplay(SurfaceHolderholder)方法設(shè)置使用哪一個(gè)SurfaceView來(lái)顯示取景圖片。調(diào)用Camera的takePicture()方法進(jìn)行拍照。(3)二維碼圖片處理技術(shù)首先二維碼圖片是圖片的一種,當(dāng)拍攝下來(lái)時(shí)需要將該圖片送往解碼函數(shù)解碼,因此需要獲取預(yù)覽中圖片,在這里用的是bitmap這個(gè)類。(4)二維碼解碼技術(shù)將預(yù)覽畫(huà)面中的二維碼圖片送到我們的解碼函數(shù)對(duì)二維碼進(jìn)行解碼,因此需要應(yīng)用Android另外的一個(gè)JAR包。這個(gè)系統(tǒng)主要是對(duì)二維碼的一種QRcode進(jìn)行解碼,因此這里需要引用sourceforge.jp里的qrcode項(xiàng)目。3.4性能需求Android二維碼的掃描識(shí)別系統(tǒng)性能方面的要求主要體現(xiàn)在以下兩個(gè)方面:(1)時(shí)間需求本系統(tǒng)需要對(duì)二維碼進(jìn)行準(zhǔn)確迅速的識(shí)別,所以對(duì)系統(tǒng)的時(shí)間要求更為嚴(yán)格。(2)系統(tǒng)界面需求軟件界面直觀、簡(jiǎn)潔,人機(jī)交互性強(qiáng)。軟件設(shè)計(jì)經(jīng)過(guò)可行性研究和需求分析階段的工作,已經(jīng)清楚系統(tǒng)必須完成的工作,下面的工作就應(yīng)該是決定“如何做”的問(wèn)題。通過(guò)該階段的工作將劃分出系統(tǒng)的物理元素——程序、文件、數(shù)據(jù)庫(kù)、文檔等,另一方面的主要工作是設(shè)計(jì)軟件的結(jié)構(gòu),即確定系統(tǒng)都由哪些模塊組成及模塊之間的相互關(guān)系。4.1系統(tǒng)概要設(shè)計(jì)概要設(shè)計(jì)的主要任務(wù)是設(shè)計(jì)軟件結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。設(shè)計(jì)軟件結(jié)構(gòu)的具體任務(wù)是:將一個(gè)復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面等。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)包括數(shù)據(jù)特征的描述、確定數(shù)據(jù)的結(jié)構(gòu)特性、以及數(shù)據(jù)庫(kù)的設(shè)計(jì)。顯然,概要設(shè)計(jì)建立的是目標(biāo)系統(tǒng)的邏輯模型,與計(jì)算機(jī)無(wú)關(guān)??傮w設(shè)計(jì)包括系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)和計(jì)算機(jī)物理系統(tǒng)的配置方案設(shè)計(jì)。Android二維碼掃描識(shí)別系統(tǒng)需要調(diào)用我們Android手機(jī)的照相機(jī),通過(guò)onPictureTaken函數(shù)二維碼圖片處理成位圖,而且將位圖在imageview中顯示出來(lái),然后再對(duì)位圖進(jìn)行譯碼,按照QRCODE二維碼生成的方式解碼成字符型,QRCODE遵循OMIA規(guī)范,如果二維碼隱藏信息是一個(gè)網(wǎng)址那么調(diào)用瀏覽器訪問(wèn)該網(wǎng)站,如果二維碼隱藏的信息是一個(gè)電話號(hào)碼,那么調(diào)用手機(jī)撥打電話功能,如果該二維碼隱藏的信息是普通的文本信息,那么顯示出文本信息即可,若不是QRCODE二維碼不做任何操作。4.1.1系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)的任務(wù)是劃分子系統(tǒng),然后確定子系統(tǒng)的模塊結(jié)構(gòu),并畫(huà)出模塊結(jié)構(gòu)圖。在這個(gè)過(guò)程中必須考慮以下幾個(gè)問(wèn)題:如何將一個(gè)系統(tǒng)劃分成多個(gè)子系統(tǒng);每個(gè)子系統(tǒng)如何劃分成多個(gè)模塊;如何確定子系統(tǒng)之間、模塊之間傳送的數(shù)據(jù)及其調(diào)用關(guān)系;如何評(píng)價(jià)并改進(jìn)模塊結(jié)構(gòu)的質(zhì)量。4.1.2計(jì)算機(jī)物理系統(tǒng)配置方案設(shè)計(jì)在進(jìn)行總體設(shè)計(jì)時(shí),還要進(jìn)行計(jì)算機(jī)物理系統(tǒng)具體配置方案的設(shè)計(jì),要解決計(jì)算機(jī)軟硬件系統(tǒng)的配置、通信網(wǎng)絡(luò)系統(tǒng)的配置等問(wèn)題。計(jì)算機(jī)物理系統(tǒng)具體配置方案要經(jīng)過(guò)用戶單位和領(lǐng)導(dǎo)部門(mén)的同意才可進(jìn)行實(shí)施。開(kāi)發(fā)管理信息系統(tǒng)的大量經(jīng)驗(yàn)教訓(xùn)說(shuō)明,選擇計(jì)算機(jī)軟硬件設(shè)備不能光看廣告或資料介紹,必須進(jìn)行充分的調(diào)查研究,最好應(yīng)向使用過(guò)該軟硬件設(shè)備的單位了解運(yùn)行情況及優(yōu)缺點(diǎn),并征求有關(guān)專家的意見(jiàn),然后進(jìn)行論證,最后寫(xiě)出計(jì)算機(jī)物理系統(tǒng)配置方案報(bào)告。從我國(guó)的實(shí)際情況看,不少單位是先買(mǎi)計(jì)算機(jī)然后決定開(kāi)發(fā)。這種不科學(xué)的、盲目的做法是不可取的,它會(huì)造成極大浪費(fèi)。因?yàn)?,?jì)算機(jī)更新?lián)Q代是非常快的,就是在開(kāi)發(fā)初期和在開(kāi)發(fā)的中后期系統(tǒng)實(shí)施階段購(gòu)買(mǎi)計(jì)算機(jī)設(shè)備,價(jià)格差別就會(huì)很大。因此,在開(kāi)發(fā)管理信息系統(tǒng)過(guò)程中應(yīng)在系統(tǒng)設(shè)計(jì)的總體設(shè)計(jì)階段才具體設(shè)計(jì)計(jì)算機(jī)物理系統(tǒng)的配置方案。4.2系統(tǒng)功能模塊系統(tǒng)總體功能有以下幾個(gè)方面:(1)相機(jī)預(yù)覽功能;(2)關(guān)閉相機(jī)功能;(3)拍照解碼:1)調(diào)用瀏覽器:如果二維碼信息隱藏的是以“http://”開(kāi)頭的網(wǎng)址,那么手機(jī)便調(diào)用默認(rèn)瀏覽器瀏覽該網(wǎng)址。2)調(diào)用撥打電話功能:如果二維碼信息隱藏的事以“TEL:”或者是“wtai:”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能。3)顯示文本信息:如果二維碼信息只是包含一些文本信息,那么直接顯示。4.2.1系統(tǒng)總體功能模塊通過(guò)上面的對(duì)系統(tǒng)的總體功能模塊的分析,便可以得出系統(tǒng)總體功能模塊圖。系統(tǒng)總體功能模塊圖如圖4.1所示。圖4.1系統(tǒng)總體功能模塊圖4.2.2拍照解碼功能模塊在整個(gè)系統(tǒng)模塊中最重要的模塊是拍照解碼功能,因此把這個(gè)模塊單獨(dú)分析,將它的功能進(jìn)行分析如圖4.2所示。圖4.2拍照解碼功能模塊圖4.3系統(tǒng)流程圖系統(tǒng)流程圖(SystemFlowchart)是描繪系統(tǒng)物理模型的傳統(tǒng)工具。它的基本思想是用圖形符號(hào)以黑盒子形式描繪系統(tǒng)里面的每個(gè)部件(程序、文件、數(shù)據(jù)庫(kù)、表格、人工過(guò)程等),表達(dá)信息在各個(gè)部件之間流動(dòng)的情況。本系統(tǒng)流程圖如圖4.3所示。圖4.3系統(tǒng)流程圖4.3.1圖片處理過(guò)程圖首先圖片的格式必須是JPEG格式的圖片,通過(guò)照相機(jī)預(yù)覽到二維碼圖片之后,需要對(duì)該圖片拍下來(lái),由于QRCODE二維碼是按照一定規(guī)則以矩陣的形式生成的,所以拍照截取到圖片之后需要譯碼字節(jié)數(shù)組,將字節(jié)數(shù)組譯碼成位圖,并將位圖顯示在imageview上,然后通過(guò)decodeQRImage函數(shù)將此位圖送往系統(tǒng)自帶的譯碼函數(shù)譯碼成字符串,最后判斷取出的字符串是否符合OMIA所規(guī)范的規(guī)則。圖片處理過(guò)程圖如圖4.4所示。圖4.4圖片處理過(guò)程圖4.3.2界面設(shè)計(jì)界面設(shè)計(jì)是人與機(jī)器之間傳遞和交換信息的媒介,一個(gè)好的界面是很重要的。它主要是站在用戶角度考慮,因此界面的設(shè)計(jì)要人性化、簡(jiǎn)潔、清楚,還要有安全性和靈活性。此系統(tǒng)功能整體上可以分為三個(gè)部分。第一部分是相機(jī)預(yù)覽顯示部分,這部分用一個(gè)surfaceview來(lái)實(shí)現(xiàn);第二部分是整個(gè)系統(tǒng)操作部分,分為兩個(gè)按鈕,第一個(gè)按鈕為重掃,第二個(gè)按鈕為關(guān)閉;第三部分是顯示拍照截取的二維碼圖片,在這兒我們用imageview視圖來(lái)顯示。
第5章軟件實(shí)現(xiàn)5.1Android應(yīng)用程序的構(gòu)成在Android平臺(tái)上,有幾個(gè)基本的用戶程序組件:Activity、Intent、Intentreceiver、Service、ContentProvider。5.1.1Activity活動(dòng)是最基本的Android應(yīng)用程序組件,應(yīng)用程序中,一個(gè)活動(dòng)通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來(lái),活動(dòng)類將會(huì)顯示由視圖控件組成的用戶接口,)事件做出響應(yīng)。大多數(shù)的應(yīng)用是由多個(gè)屏幕顯示組成。例如文本信息的應(yīng)用也許有一個(gè)顯示發(fā)送消息狗聯(lián)系人列表屏幕,第二個(gè)屏幕用來(lái)寫(xiě)文本消息和選擇收件人,再來(lái)一個(gè)屏幕查看消息歷史或者消息設(shè)置等。這里每一個(gè)這樣的屏幕就是一個(gè)活動(dòng),很容易實(shí)現(xiàn)從一個(gè)屏幕到一個(gè)新的屏幕并且完成新的活動(dòng)。在某些情況下當(dāng)前的屏幕也許需要向上一個(gè)屏幕活動(dòng)提供返回值一比如讓用戶從手機(jī)中挑選一張照片返回通訊錄做為電話撥入者的頭像。當(dāng)一個(gè)新的屏幕打開(kāi)后,前一個(gè)屏幕將會(huì)暫停,并保存在歷史堆棧中。用戶可以返回到歷史棧中的前n個(gè)屏幕。當(dāng)屏幕不再使用時(shí),還可以從歷史堆棧中刪除。默認(rèn)情況下,Android將會(huì)保留從主屏幕到每一個(gè)應(yīng)用的運(yùn)行屏幕。簡(jiǎn)單理解Activity代表一個(gè)用戶所能看到的屏幕,Activity主要是處理一個(gè)應(yīng)用的整體性工作,例如,監(jiān)聽(tīng)系統(tǒng)事件(按鍵事件、觸摸屏事件等、為用戶顯示指定的View,啟動(dòng)其他Activity等。所有應(yīng)用的Activity都繼承于Android.app.Activity類,該類是Android提供的基層類,其他Activity繼承該父類后,通勸verride父類的方法來(lái)實(shí)現(xiàn)各種功能,這種設(shè)計(jì)在其他領(lǐng)域也較為常見(jiàn)。5.1.2Intent調(diào)用Android專有類Intent進(jìn)行架構(gòu)屏幕之間的切換。Intent是描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)個(gè)最重要的部分是動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類型有:MAIN(活動(dòng)的門(mén)戶)、VIEW,PICK,EDIT等。而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)則以URI的形式進(jìn)行表示。例如:要查看某個(gè)人的聯(lián)系方式,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類型為VIEW的Intent,以及一個(gè)表示這個(gè)人的身份。Android使用了Intent這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之間移動(dòng)。Intent類用于描述一個(gè)應(yīng)用將會(huì)做什么事。祖ntent的描述結(jié)構(gòu)中,有兩個(gè)最重要的部分:動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類型有:MAIN、VIEW,PICK,EDIT等。而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)則以URI的形式進(jìn)行表示。例如:要查看一個(gè)人關(guān)系方式,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類型為VIEW的intent,以及一個(gè)表示這個(gè)人的URI,與之有關(guān)系的一個(gè)類叫IntentFilter。相對(duì)于intent是一個(gè)有效的做某事的請(qǐng)求,一個(gè)intentfilter則用于描述一個(gè)activity(或者IntentReceiver)能夠操作哪些intent。一個(gè)activity如果要顯示一個(gè)人的聯(lián)系方式時(shí),需要聲明一個(gè)IntentFilter,這個(gè)IntentFilter要知道怎么去處理VIEW動(dòng)作和表示一個(gè)人的URIoIntentFilter需要在AndroidManifest.xml中定義。通過(guò)解析各種intent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。當(dāng)向前導(dǎo)航時(shí),activity將會(huì)調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中定義的IntentFilter中查找,找到最匹配myIntent的Intent對(duì)應(yīng)的activity。新的activity接收到myIntent的通知后,開(kāi)始運(yùn)行。緣tartActivity方法被調(diào)用將觸發(fā)解析myIntent的動(dòng)作,這個(gè)機(jī)制提供了兩個(gè)關(guān)鍵好處:一是能夠重復(fù)利用從其它組件中以Intent的形式產(chǎn)生的一個(gè)請(qǐng)求,二是Activities可以在任何時(shí)候被一個(gè)具有相同IntentFilter的新的Activity取代。5.1.3Intentreceiver當(dāng)你希望你的應(yīng)用能夠?qū)σ粋€(gè)外部的事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或者到了晚上時(shí))做出響應(yīng),你可以使用一個(gè)IntentReceiver。雖然IntentReceiver在感興趣的事件發(fā)生時(shí),會(huì)使用NotificationManage。通知用戶,但它并不能生成一個(gè)UIoIntentReceiver在AndroidManifest.xml中注冊(cè),但也可以在代碼中使用Context.registerReceiverQ進(jìn)行注冊(cè)。當(dāng)一個(gè)intentreceiver被觸發(fā)時(shí),你的應(yīng)用不必對(duì)請(qǐng)求調(diào)用intentreceiver}系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)你的應(yīng)用。各種應(yīng)用還可以通過(guò)使用Context.broadcastIntent。將它們白己的intentreceiver廣播給其它應(yīng)用程序。5.1.4Service一個(gè)Service是一段長(zhǎng)生命周期的,沒(méi)有用戶界面的程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè)Activity讓使用者可以選擇歌曲并提交歌曲。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)Activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂(lè)應(yīng)該還在播放的。在這個(gè)例子中,媒體播放器這個(gè)activity會(huì)使用Context.startService味啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂(lè)的播放。同時(shí),系統(tǒng)也將保持這Service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外我們還可以通過(guò)使用Context.bindServicen方法,連接到一個(gè)service上(如果這個(gè)service還沒(méi)有運(yùn)行將啟動(dòng)它)。當(dāng)連接到Service之后,我們還可Service提供的接口與它進(jìn)行通訊。拿媒體播放器這個(gè)例子來(lái)說(shuō)我們還可以進(jìn)行暫停、重播等操作。5.1.5ContentProviderAndroid應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫(kù)中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。因?yàn)閮?nèi)容提供器類實(shí)現(xiàn)了一組方法,從而能夠讓其它的應(yīng)用保存或讀取此內(nèi)容提供器處理的各種數(shù)據(jù)類型。數(shù)據(jù)是應(yīng)用的核心。在Android中,默認(rèn)使用鼎鼎大名的SQLite作為系統(tǒng)DB。但是在Android中,使用方法有點(diǎn)小小的不一樣。在Android中每一個(gè)應(yīng)用都運(yùn)行在各自的進(jìn)程中,當(dāng)你的應(yīng)用需要訪問(wèn)其他應(yīng)用的數(shù)據(jù)時(shí),也就需要數(shù)據(jù)在不同的虛擬機(jī)之間傳遞,這樣的情況操作起來(lái)可能有些困難在通常情況下,你不能訪問(wèn)其他的應(yīng)用的db文件),ContentProvider正是用來(lái)解決在不同的應(yīng)用包之間共享數(shù)據(jù)的工具。所有被一個(gè)Android應(yīng)用程序創(chuàng)建的偏好設(shè)置,文件和數(shù)據(jù)庫(kù)都是私有的為了和其他應(yīng)用程序共享數(shù)據(jù),應(yīng)用程序不得不創(chuàng)建一個(gè)ContentProvider要回索其他應(yīng)用程序的數(shù)據(jù),它自己的ContentProvider必須被調(diào)用。Android本地ContentProvider包括:Ca11Log:地址和接收到的電話信息、Contact.People.Phones:存儲(chǔ)電話號(hào)碼、Setting.System:系統(tǒng)設(shè)置和偏好設(shè)置等等。5.2代碼編寫(xiě)在已經(jīng)搭建好的Android應(yīng)用程序開(kāi)發(fā)平臺(tái):JavaJDKSE+Eclipse+GoogleAndroidSDK+ADT中建立Android應(yīng)用程序程序項(xiàng)目,如圖5.1所示。圖5.1建立Android應(yīng)用程序項(xiàng)目5.2.1主界面Activity布局在整個(gè)界面的背景,用Surface整個(gè)底層界面用來(lái)顯示照相機(jī)拍攝到的圖像。在界面的頂部放置TextView用來(lái)存放解碼后顯示的信息。在界面的中間部分,F(xiàn)rontView用來(lái)把顯示到的圖像周圍都涂成半透明的白色,中間的空白區(qū)域用來(lái)掃描二維碼,ImageView用來(lái)顯示掃描二維碼成功后截取到的圖像。在操作界面的地步,TextView用來(lái)簡(jiǎn)單介紹本軟件可以掃描的范圍,Button用來(lái)關(guān)閉軟件和重新掃描。界面設(shè)計(jì)布局如圖5.2所示。圖5.2界面布局主界面的Activity的布局是由layout下的main.xml確定的:<AbsoluteLayoutAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"><TextViewAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="80dp"Android:layout_y="410dp"Android:textColor="#000000"Android:text="掃描:"/><TextViewAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="125dp"Android:layout_y="385dp"Android:textColor="#000000"Android:text="一維EAN碼"/><TextViewAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="125dp"Android:layout_y="400dp"Android:textColor="#000000"Android:text="二維QR碼"/><TextViewAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="125dp"Android:layout_y="415dp"Android:textColor="#000000"Android:text="二維WEPC碼"/><TextViewAndroid:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="125dp"Android:layout_y="430dp"Android:textColor="#000000"Android:text="快遞單"/><TextViewAndroid:id="@+id/textview"Android:layout_width="wrap_content"Android:layout_height="wrap_content"Android:layout_x="0dp"Android:layout_y="0dp"Android:textColor="#000000"/></AbsoluteLayout>5.2.2Activity組件的編寫(xiě)相機(jī)預(yù)覽,用于開(kāi)啟手機(jī)照相機(jī)。我們用一個(gè)按鈕實(shí)現(xiàn)該功能,添加一個(gè)按鈕并且設(shè)置并綁定監(jiān)聽(tīng)器。在監(jiān)聽(tīng)器里面我用一個(gè)Camera.PreviewCallback()函數(shù)實(shí)現(xiàn),函數(shù)調(diào)用相機(jī)的OPEN方法即可實(shí)現(xiàn)預(yù)覽功能同時(shí)將變量bIfPreview設(shè)置為true。當(dāng)然我們要取得二維碼,因此我們要不活圖片,我們需要設(shè)置圖片的格式和一些參數(shù)。 privateCamera.PreviewCallbackpreviewcallback=newCamera.PreviewCallback(){ publicvoidonPreviewFrame(byte[]data,Cameraarg1){ //取得指定范圍的幀的數(shù)據(jù) Log.e("tag","previewcallback"); PlanarYUVLuminanceSourcesource=newPlanarYUVLuminanceSource( data,800,480,dsLeft,dstop,dswidth,dsheight); mbitmap=source.renderCroppedGreyscaleBitmap(); //顯示灰度圖 Matrixmatrix=newMatrix(); matrix.setRotate(90); mbitmap=Bitmap.createBitmap(mbitmap,0,0,400,350,matrix,true);通過(guò)google提供的二維碼識(shí)別方法getText()得到二維碼所包含的的字符串信息儲(chǔ)存在字符串strQR2中,如果二維碼信息隱藏的是以“http://”開(kāi)頭的網(wǎng)址,那么手機(jī)便調(diào)用瀏覽器瀏覽該網(wǎng)站;如果二維碼信息隱藏的是以“wait://”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能;如果二維碼信息隱藏的是以“TEL:”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能;若僅是普通文字,則將文本顯示出來(lái)即可。try{ Resultresult=reader.decode(bitmap); StringstrQR2=result.getText(); StringstrResult="BarcodeFormat:" +result.getBarcodeFormat().toString()+"text:" +result.getText(); if(strQR2!=""){ if(URLUtil.isNetworkUrl(strQR2)){/*如果二維碼信息隱藏的是以“http://”開(kāi)頭的網(wǎng)址,那么手機(jī)便調(diào)用瀏覽器瀏覽該網(wǎng)站*/ mMakeTextToast(strQR2,true); UrimUri=Uri.parse(strQR2); Intentintent=newIntent(Intent.ACTION_VIEW,mUri); startActivity(intent); }elseif(eregi("wtai://",strQR2)){/*如果二維碼信息隱藏的是以“wait://”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能*/ String[]aryTemp01=strQR2.split("wtai://"); IntentmyIntentDial=newIntent( "Aent.action.DIAL",Uri.parse("tel:" +aryTemp01[1])); startActivity(myIntentDial); }elseif(eregi("TEL:",strQR2)){ /*如果二維碼信息隱藏的是以“TEL:”開(kāi)頭的電話號(hào)碼,那么手機(jī)直接調(diào)用撥打電話功能*/ String[]aryTemp01=strQR2.split("TEL:"); IntentmyIntentDial=newIntent( "Aent.action.DIAL",Uri.parse("tel:" +aryTemp01[1])); startActivity(myIntentDial); }else{ /*若僅是普通文字,則將文本顯示出來(lái)即可*/ mMakeTextToast(strQR2,true); } }5.3驗(yàn)證程序讀取的二維碼信息測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程,測(cè)試的目的就是在軟件投入生產(chǎn)運(yùn)行之前,盡可能的發(fā)現(xiàn)軟件中的錯(cuò)誤并能及時(shí)改正。當(dāng)我們把整個(gè)項(xiàng)目的完成之后,將其SurfaceViewTest.apk文件拷貝到手機(jī)上,在Android手機(jī)上進(jìn)行安裝,能夠成功安裝軟件。為了確定二維碼的解析是否正確,通過(guò)在線二維碼生成器生成包含特定信息的二維碼對(duì)程序的識(shí)別準(zhǔn)確率進(jìn)行測(cè)試。當(dāng)二維碼中包含特定網(wǎng)址信息時(shí),用Android手機(jī)對(duì)準(zhǔn)二維碼掃描成功后就會(huì)自動(dòng)調(diào)用瀏覽器,訪問(wèn)特定網(wǎng)址信息,如圖5.3所示;圖5.3網(wǎng)址信息掃描識(shí)別成功當(dāng)二維碼中包含特定電話號(hào)碼信息時(shí),用Android手機(jī)對(duì)準(zhǔn)二維碼掃描成功后會(huì)自動(dòng)調(diào)用系統(tǒng)撥號(hào)程序,并自動(dòng)完成特定電話號(hào)碼輸入,如圖5.4所示;圖5.4電話號(hào)碼掃描識(shí)別成功當(dāng)二維碼中包含特定文本信息時(shí),用Android手機(jī)對(duì)準(zhǔn)二維碼掃描成功后會(huì)自動(dòng)在屏幕上顯示該文本信息,如圖5.5所示;圖5.5文本信息掃描識(shí)別成功
總結(jié)與展望在互聯(lián)網(wǎng)和移動(dòng)通信不斷發(fā)展的今天,以手機(jī)為代表的移動(dòng)終端技術(shù)及產(chǎn)品得到了極大的推廣,Android手機(jī)應(yīng)用程序也是花樣翻新層出不窮。通過(guò)這次畢業(yè)設(shè)計(jì),我拓寬了知識(shí)面,鍛煉了能力,綜合素質(zhì)得到較大提高。Android二維碼的掃描識(shí)別系統(tǒng)設(shè)計(jì)的基本目的,在于通過(guò)理論與實(shí)際的結(jié)合進(jìn)一步提高思想覺(jué)悟,將以前學(xué)習(xí)的知識(shí)串聯(lián)起來(lái)并進(jìn)一步鞏固。在本次畢業(yè)設(shè)計(jì)的Android軟件開(kāi)發(fā)過(guò)程中,也學(xué)習(xí)到了很多軟件工程領(lǐng)域的規(guī)范化的開(kāi)發(fā)方法、建模方法、同時(shí)也鍛煉了自己查找資料和文檔撰寫(xiě)的能力。在需求分析階段,我根據(jù)所學(xué)軟件工程理論知識(shí),特別是需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)部分的知識(shí),和其中的分析和建模的方法,設(shè)計(jì)了需要實(shí)現(xiàn)的基本功能。提出本項(xiàng)目所要實(shí)現(xiàn)的目標(biāo),系統(tǒng)性能、安全性、可靠性方面的要求等。在系統(tǒng)設(shè)計(jì)階段,我們又仔細(xì)復(fù)習(xí)教材中關(guān)于概要設(shè)計(jì)中應(yīng)用的相關(guān)方法、應(yīng)注意的幾個(gè)問(wèn)題和概要設(shè)計(jì)階段的目標(biāo),在需求分析的基礎(chǔ)上有提出了更具體的可行性分析和實(shí)現(xiàn)方案。通過(guò)這次畢業(yè)設(shè)計(jì)使自己對(duì)知識(shí)的運(yùn)用能力得到提升;而且還鍛煉了我的自學(xué)能力;更重要的是培養(yǎng)了觀察、分析和解決問(wèn)題的實(shí)際工作能力,對(duì)以后的工作將會(huì)起到很好的幫助。
參考文獻(xiàn)[1]宋永生.基于Android的商品比價(jià)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù).2011(18)[2]楊兆選,吳佳鵬,白卓夫,蘇育挺,王曾敏.基于Gabor濾波和BP神經(jīng)網(wǎng)絡(luò)的二維條碼區(qū)域提取[J].天津大學(xué)學(xué)報(bào).2010(03)[3]高羽佳,張旭東,項(xiàng)尚.基于圖像處理的QR碼識(shí)別研究[J].滁州學(xué)院學(xué)報(bào).2009(01)[4]肖翔,劉曉明,王云柯.QR碼圖像的矯正與定位方法研究[J].計(jì)算機(jī)科學(xué).2007(11)[5]邵晨光,姚娜,胡汝坤.基于HOUGH變換的二維條碼識(shí)別技術(shù)的研究[J].長(zhǎng)春師范學(xué)院學(xué)報(bào).2007(08)[6]劉悅,劉明業(yè),劉明軍.快速響應(yīng)矩陣碼自動(dòng)識(shí)別算法的設(shè)計(jì)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用.2006(06)[7]劉慧娟.一種快速響應(yīng)碼圖像的分割和校正方法[J].電子測(cè)量與儀器學(xué)報(bào).2006(01)[8]薄華,馬縛龍,焦李成.圖像紋理的灰度共生矩陣計(jì)算問(wèn)題的分析[J].電子學(xué)報(bào).2006(01)[9]劉寧鐘.復(fù)雜背景中條碼檢測(cè)定位技術(shù)的研究[J].南京航空航天大學(xué)學(xué)報(bào).2005(01)[10]劉寧鐘,楊靜宇.基于波形分析的二維條碼識(shí)別[J].計(jì)算機(jī)研究與發(fā)展.2004(03)[11]靳巖,姚尚朗.GoogleAndroid開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)[M].北京:人民郵電出版社,2009.[12]BurnetteEd.Android基礎(chǔ)教程.張波,高朝勤,楊選等譯[M].北京:人民郵電出版社.2009.[13]王向輝,張國(guó)印,陳潔.Android應(yīng)用程序開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2010.[14]余志龍.GoogleAndroidSDK開(kāi)發(fā)范例大全[M].北京:人民郵電出版社,2009.[15]RogerS.Pressman.軟件工程:實(shí)踐者的研究方法(原書(shū)第7版).鄭人杰,馬素霞等譯[M].北京:機(jī)械工業(yè)出版社.2011.[16]張海藩.軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社.2008.[17]IanSommerville,軟件工程[M].北京:機(jī)械工業(yè)出版社.2011.[18]ShariLawrencePfleeger,JoanneM.Atlee等著.軟件工程(第4版)[M].楊衛(wèi)東等譯.北京:人民郵電出版社.2003.[19]魏祖寬,胡旺,鄭莉華,陳安龍.數(shù)據(jù)庫(kù)系統(tǒng)及應(yīng)用[M].北京:電子工業(yè)出版社,2008.[20]趙真.Eclipse開(kāi)發(fā)技術(shù)詳解[M].化學(xué)工業(yè)出版社.2010.[21]彭晨陽(yáng).java實(shí)用系統(tǒng)開(kāi)發(fā)指南[M].北京:機(jī)械工業(yè)出版社,2004.[22]廖文奎.Struts編程基礎(chǔ)與實(shí)例精講[M].北京:中國(guó)電力出版社,2006.[23]WilliamP.Hakanson.BarCodesBringHigh-flyingSuccessToHelicopter[J]CompanyManufSyst,1988,6(10)[24]W.C.Mc.Cubbins.BarCodesQualityControl:WhyBarCodeVerification.ProceedingsoftheTechnicalProgram[J].NEPCONWEST’95(Norwalk,CT,USA:ReedExihibition.Compainies1995)[25]UngerS.H.PatternDetectionandRecognition[J].ProceedingoftheIRE.1959:1737-1752p
致謝在完成畢業(yè)論文此期間通過(guò)大量收集資料和廣泛閱讀文獻(xiàn),我認(rèn)識(shí)到了自己的諸多不足,同時(shí)也有很多收獲。即使對(duì)大學(xué)四年所學(xué)的總結(jié)和應(yīng)用,也是對(duì)自己的一次檢驗(yàn)和磨礪。首先,我要特別感謝我的指導(dǎo)老師,胡瑛老師。胡瑛老師學(xué)問(wèn)淵博、治學(xué)嚴(yán)謹(jǐn)、平易近人。感謝老師在百忙之中抽出時(shí)間指導(dǎo)我的畢業(yè)論文寫(xiě)作,以淵博的學(xué)識(shí)、非凡的氣質(zhì)、敬業(yè)的工作作風(fēng)、獨(dú)特的人格魅力,始終感染著我、激勵(lì)著我,這些都將成為寶貴的財(cái)富讓我享用終身。同時(shí)也感謝默默奉獻(xiàn)在三尺講臺(tái)上的各位老師和大學(xué)四年一直默默關(guān)心這我的輔導(dǎo)員老師。感謝我的同學(xué)朋友們?cè)趯W(xué)習(xí)和生活中對(duì)我的關(guān)心和幫助,感謝她們?cè)谖艺撐膶?xiě)作中遇到瓶頸時(shí)給予我建議。你們的睿智博學(xué)、積極向上、勤勉不息時(shí)時(shí)激勵(lì)著我,這段一起走過(guò)的美好時(shí)光將深深地刻入我記憶的年輪。感謝我的父母,感謝他們一直以來(lái)對(duì)我學(xué)習(xí)和生活上的關(guān)心,感謝他們用善良、高尚的品德讓我懂得了如何做人、如何處世。他們無(wú)聲的愛(ài)正是我前進(jìn)中最強(qiáng)大的精神動(dòng)力最后,謹(jǐn)向在百忙之中抽出時(shí)間評(píng)審本論文的老師致以誠(chéng)摯的感謝!附錄附錄1Activity代碼packagecom.dream.surface.camera;importjava.security.PublicKey;importjava.util.Timer;importjava.util.TimerTask;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importcom.dream.surface.R;importcom.google.zxing.BinaryBitmap;importcom.google.zxing.MultiFormatReader;importcom.google.zxing.Result;importcom.google.zxing.Android.PlanarYUVLuminanceSource;importmon.HybridBinarizer;importandroid.R.integer;importandroid.app.Activity;importandroid.content.Context;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.graphics.Matrix;importandroid.hardware.Camera;importandroid.hardware.Camera.PreviewCallback;import.Uri;importandroid.os.Bundle;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.view.SurfaceHolder;importandroid.view.View;importandroid.view.Window;importandroid.view.WindowManager;importandroid.view.SurfaceHolder.Callback;importandroid.view.SurfaceView;importandroid.view.View.OnClickListener;importandroid.webkit.URLUtil;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.TextView;importandroid.widget.Toast;publicclassPictureTestextendsActivity{ privateFrontViewfrontview; privatePictureSurfaceTestsurCameraView; privatePictureSurfaceTestsurretake; privateBackGroundbackground; privateButtoncancel; privateButtonretake; privateButtontakePictureButton;privateImageViewimageView; privateTextViewtextView; privateTimermTimer; privateMyTimerTaskmTimerTask;privateBitmapmbitmap; privateintds
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流課程設(shè)計(jì)實(shí)驗(yàn)
- 種蘑菇課程設(shè)計(jì)
- 中華人民共和國(guó)民法典知識(shí)競(jìng)賽題庫(kù)及答案
- 2024幼兒園安全教育工作總結(jié)結(jié)尾(31篇)
- 2024年自來(lái)水公司年終工作總結(jié)(35篇)
- 液體混合裝置plc課程設(shè)計(jì)
- 玉雕課程設(shè)計(jì)
- 食品行業(yè)客服工作總結(jié)
- 客房清潔員的工作總結(jié)
- 中醫(yī)科醫(yī)師工作總結(jié)
- 深部真菌病課件
- 用戶界面測(cè)試
- 人工氣道濕化的護(hù)理培訓(xùn)課件
- 電網(wǎng)適用的法律法規(guī)標(biāo)準(zhǔn)規(guī)范清單
- 讀書(shū)分享-給教師的一百條建議
- GB/T 4269.3-2000農(nóng)林拖拉機(jī)和機(jī)械、草坪和園藝動(dòng)力機(jī)械操作者操縱機(jī)構(gòu)和其他顯示裝置用符號(hào)第3部分:草坪和園藝動(dòng)力機(jī)械用符號(hào)
- GB/T 11618.1-2008銅管接頭第1部分:釬焊式管件
- 開(kāi)工復(fù)工第一課
- 安徽省淮南市鳳臺(tái)縣基層診所醫(yī)療機(jī)構(gòu)衛(wèi)生院社區(qū)衛(wèi)生服務(wù)中心村衛(wèi)生室地址信息
- 旅游服務(wù)禮儀說(shuō)課市公開(kāi)課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件
- 【線性代數(shù)自考練習(xí)題】滇西應(yīng)用技術(shù)大學(xué)專升本真題匯總(附答案解析)
評(píng)論
0/150
提交評(píng)論