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