基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)_第1頁
基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)_第2頁
基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)_第3頁
基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)_第4頁
基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、西南科技大學本科生畢業(yè)論文基于Android的WiFi文件傳輸系統(tǒng)的設計與實現(xiàn)摘要:隨著智能手機的普及,越來多的人會使用手機來分享文件。雖然目前應用市場上有很多文件分享的軟件,但其傳輸?shù)姆绞蕉即嬖谝欢ǖ娜毕?。本系統(tǒng)就是根據(jù)目前Android應用市場上各種文件傳輸軟件的優(yōu)缺點,使用WiFi直連和SOCKET通信來傳輸文件,解決了藍牙傳輸速度慢,NFC傳輸數(shù)據(jù)小,網(wǎng)絡傳輸需要流量或網(wǎng)絡連接,WiFi熱點傳輸時不能使用WiFi上網(wǎng)等問題。本系統(tǒng)包含了文件的搜索,管理,刪除,文件/消息傳輸?shù)裙δ?。最多支?個文件同時發(fā)送,在連接設備后,可以瀏覽對方設備的文件目錄。本文首先介紹了選題背景和現(xiàn)狀,然后詳細

2、闡述了系統(tǒng)中使用的關鍵技術的發(fā)展和相關知識。通過對系統(tǒng)的運行測試得出可以發(fā)現(xiàn):系統(tǒng)運行流暢,多文件傳輸穩(wěn)定,傳輸速度也很快,滿足用戶需求,具有一定的商業(yè)價值及較強的使用推廣價值。關鍵詞:WiFi直連;SOCKET通信;文件搜索II西南科技大學本科生畢業(yè)論文DesignandImplementationofWiFi-DirectFileTransferSystemonAndroidPlatformAbstract:Withthepopularityofsmartphones,moreandmorepeoplewillusemobilephonestosharefiles,althoughther

3、earealotofdocumentsonthemarketshareofthesoftware,butthewaytheyaretransferredtodeterminetheexistenceofacertain.ThissystemisdesignedtotheadvantagesanddisadvantagesoftheAndroidMarketonavarietyoffiletransfersoftware,usingWiFi-DirectconnectionandsocketcommunicationtoachievethefiletransmissiontosolvetheBl

4、uetoothtransmissionspeedisslow,smallNFCdatatransmission,thetransmissionnetworktonetworktrafficorconnection,WiFihotspotstransmissioncannotuseWiFiInternetaccessandotherissues.Thisapplicationcontainsthefilesearch,management,delete,file/messagetransferandotherfunctions.Supportsupto9filesatthesametime,in

5、connectionwiththedevice,youcanbrowsethefiledirectoryoftheotherequipment.Thispaperfirstlyintroducesthebackgroundandcurrentsituationoftheselectedtopic,andthendescribesthedevelopmentofkeytechnologiesandrelatedknowledgeindetail.Throughtheoperationtestofthesystemobtainedcanbefound:theoperationofthesystem

6、isverystablesmooth,multidocumenttransmissionisrelativelystable,transmissionspeedisfaster,basicallymeettheneedsofusers,hasacommercialvalueandgoodpopularizationandusevalue.KeyWords:Wifi-Direct,socketcommunication,high-speedtransmissionIII西南科技大學本科生畢業(yè)論文目錄第1章緒論1.1.1 引言1.1.2 選題的目白及意義1.1.3 國內外相關研究1.第2章系統(tǒng)需求

7、分析4.2.1 應用需求概述4.2.2 用戶類與特征4.2.3 系統(tǒng)功能性需求分析4.2.4 系統(tǒng)非功能性需求5.第3章系統(tǒng)概要設計7.3.1 應用模塊劃分及模塊功能介紹7.3.2 應用的數(shù)據(jù)存儲8.3.3 數(shù)據(jù)庫設計 Android數(shù)據(jù)庫介紹 本系統(tǒng)數(shù)據(jù)庫設計9.3.4 Android開發(fā)相關技術介紹103.4.1 Android的發(fā)展歷史103.4.2 Android系統(tǒng)結構介紹 Android四大組件1.2第4章系統(tǒng)詳細設計及實現(xiàn)154.1 開發(fā)工具和軟件平臺154.2 傳輸記錄模塊 查看傳輸記錄174.3 數(shù)據(jù)庫操作模塊1.8

8、4.4 文件管理模塊 選擇要發(fā)送的文件 移除要發(fā)送的文件224.4.3 查看文件屬性234.4.4 打開音樂,視頻等文件24IV西南科技大學本科生畢業(yè)論文4.4.5 遍歷手機文件264.5 設備連接管理模塊274.5.1 連接其他設備284.5.2 重命名本機設備304.6 文件/數(shù)據(jù)傳輸模塊314.6.1 設置同時發(fā)送文件最大個數(shù)334.6.2 發(fā)送文件344.6.3 文件/數(shù)據(jù)傳輸性能354.7 應用UI設計.364.7.1 應用界面框架結構設計364.7.2 主界面的設計374.7.3 UI控件的使用37第5章系統(tǒng)測試.395.1 測試環(huán)境.395.2 模

9、塊功能測試395.2.1 設置同時傳輸文件最大個數(shù)功能測試395.2.2 重命名本機設備功能測試如5.2.3 選擇要發(fā)送的文件功能測試415.2.4 移除要發(fā)送的文件功能測試425.2.5 發(fā)送文件功能測試435.2.6 查看傳輸記錄功能測試445.2.7 打開本機音樂,視頻等文件功能測試.455.2.8 查看文件屬性功能測試465.2.9 連接設備功能測試485.3 非功能性測試485.3.1 連文件傳輸性能測試485.3.2 系統(tǒng)兼容性測試49結論51.致談日52參考文獻53西南科技大學本科生畢業(yè)論文第1章緒論1.1 引言隨著近幾年移動行業(yè)的飛速發(fā)展,手機已進入智能時代?,F(xiàn)在的手機智能平臺

10、主要包括Android,IOS,Win10移動版,而用戶最多的還是Andorid和IOS平臺,所以熟悉這些智能平臺的應用開發(fā)是必須的。在日常生活中,朋友之間經(jīng)常會分享手機中的一些新鮮的,好玩的,有趣的事情,但是目前的手機端分享方式都存在一些弊端。如常見的網(wǎng)絡分享,這必須要求用戶雙方都連接互聯(lián)網(wǎng),條件比較苛刻。而藍牙分享雖然不需要聯(lián)網(wǎng),但是傳輸速度比較慢。針對傳輸速度慢的問題,想到了WiFi熱點傳輸,的確這個傳輸速度明顯快于藍牙,但是利用WiFi熱點傳輸時又有一個問題來了,如果要在這時用WiFi上網(wǎng)呢,這就辦不到了。針對各種分享方式的弊端,需要找到一種新的分享來解決這些問題。而新的Wifi直連技

11、術,則能很好地解決上面的那些弊端,具有不需聯(lián)網(wǎng),傳輸速度快,傳輸文件的時候還能WiFi上網(wǎng)的優(yōu)點。如今的Android手機中,進入WiFi高級設置里面就可以看到有WiFiDirect(WiFi直連)這個東西,但是官方并沒有開發(fā)對應的app來傳輸文件,而系統(tǒng)已經(jīng)對WiFi直連這個技術進行了支持,并封裝了相應的api給開發(fā)者使用。1.2 選題的目的及意義根據(jù)目前Android手機平臺的各種分享方式的弊端,找到一種新的分享文件的方式,從而解決NFC傳輸?shù)臄?shù)據(jù)小,藍牙分享速度慢,網(wǎng)絡分享需聯(lián)網(wǎng),WiFi熱點分享時不能用WiFi上網(wǎng)的問題。本應用就是利用WiFi直連技術,來解決目前的一些文件分享方式存在

12、的弊端,從而讓Android智能手機用戶能夠更高效方便的分享文件。實現(xiàn)在高速分享文件的同時利用WiFi高速上網(wǎng)。1.3 國內外相關研究2010年10月,Wi-FiAlliance(wi-fi聯(lián)盟)發(fā)布Wi-FiDirect白皮書,白皮書中介紹了有關于這種技術的基本信息、這種技術的特點和這種技術的功能,Wi-FiDirect標準是指允許無線網(wǎng)絡中的設備無需通過無線路由器即可相互連接。與藍牙技術類似,這種標準允許無線設備以點對點形式互連,而且在傳輸速度與傳輸距離方面則比藍牙有大幅提升1o按照定義,Wi-FiCERTIFIEDWi-FiDirect設備是支持對等連接的設備,這種西南科技大學本科生畢業(yè)

13、論文設備既支持基礎設施網(wǎng)絡,也支持P2唯接。Wi-FiDirect設備能夠作為典型的站點(STA)加入基礎設施網(wǎng)絡,而且必須支持Wi-FiProtectedSetups入者功能。Wi-FiDirect設備通過組建小組(以一對一或一對多的拓撲形式)來建立連接,小組的工作形式與基礎設施BSSgfe似。由一部Wi-FiDirect設備負責整個小組,包括控制哪部設備加入、小組何時啟動和終止等。這種設備對于傳統(tǒng)客戶設備而言就是一部接入點,能夠提供基礎設施接入點所提供的部分服務2o最初,Wi-FiAlliance&reg聯(lián)盟的這一新標準原名為“Wi-Fipeer-to-peer”,而最終定名為Wi

14、FiDirect,面向各種Wi-Fi設備,從電腦到手機、到電腦外設,至U家電等等。符合該標準的設備無需熱點和路由器,就可以方便的和其他設備實現(xiàn)直接連接,傳輸數(shù)據(jù)或共享應用。Wi-FiDirect可以支持一對一直連,也可以實現(xiàn)多臺設備同時連接,并且Wi-FiDirect標準將會支持所有的Wi-Fi設備,從11a/b/g至11n,不同標準的Wi-Fi設備之間也可以直接互聯(lián)。由于WiFiDirect支持設備間的直接連接,所以又稱為WiFiP2p。P2P架構中定義了三個組件,筆者將其稱為“一個設備,兩種角色”,分別如下。 P2PDevice:它是P2P架構中角色的實體,可把它當做一個WiFi設備。 P

15、2PGroupOwnerGroupOwner(GO)是一種角色,其作用類似于InfrastructureBSS中的AP。 P2PClient:另外一種角色,其作用類似于InfrastructureBSS中的STA。實際上,P2P技術模仿了InfrastructureBSSR絡結構。在組建P2PGroup即P2PNetwork)之前,智能終端都是一個一個的P2PDevice當這些P2PDevice設備之間完成P2PB商后,其中將有一個并且只能有一個Device來扮演GO的角色(即充當AP),而其他Device扮演Client的角色。P2暇備之間想要互相發(fā)現(xiàn)對方,則需要P2PDiscovery勺支

16、持.P2PDiscovery勺作用很簡單,就是使多個P2PDevice夠互相發(fā)現(xiàn)并構建一個Group。根據(jù)規(guī)范,它包括四個主要技術子項。 DeviceDiscovery:用于P2暇備搜索周圍其他支持P2P的設備。 ServiceDiscovery:該DeviceDiscovery基礎上,P2Ps支持搜索指定的服務。這部分功能屬于可選項,筆者覺得它和2.2."中提到的Bonjour類似。 GroupFormation:用于決定兩個P2PDevice誰來扮演GO,誰來扮演Cliento P2PInvitation:用于激活一個PersistentGroup,或者用于邀請一個Client西

17、南科技大學本科生畢業(yè)論文加入一個當前已存在的Group西南科技大學本科生畢業(yè)論文第2章系統(tǒng)需求分析2.1應用需求概述根據(jù)本應用的目標可以列出這些需求:1)能夠選擇要發(fā)送的文件,也能移除不想發(fā)的文件2)能夠發(fā)送文件(核心需求,要能成功發(fā)送/接受文件)3)簡單的文件管理(瀏覽,刪除文件等)4)重命名本機設備(基本需求,方面手機在傳文件時能夠分辨設備)5)查看文件傳輸記錄(核心需求,記錄接受/發(fā)送了哪些文件)6)查看正在傳輸?shù)奈募顟B(tài)(核心需求)系統(tǒng)功能結構如圖2-1所示。應用程序南消發(fā)的件選取要送文備間件輸設之文傳單文管簡的件命本設重名機看輸錄查傳記看輸態(tài)查傳狀圖2-1應用功能結構圖2.2 用戶類

18、與特征APP用戶:此類用戶主要是使用應用來分享文件,并且實時查看傳輸記錄,也可以查看傳輸?shù)臍v史記錄。同時亦可以使用應用來對本機設備進行簡單的管理,如重命名本機設備,查看本機設備上的一些文件屬性等等,還是可以預覽該文件。2.3 系統(tǒng)功能性需求分析根據(jù)對市場上其它分享應用的調查和分析,可以列出應用程序的功能用例,西南科技大學本科生畢業(yè)論文系統(tǒng)用例圖如圖2-2所示:普通用戶圖2-2系統(tǒng)用例圖2.4 系統(tǒng)非功能性需求除了基本的功能之外,應用還應該滿足一些非開作為一款實用的分享程序,西南科技大學本科生畢業(yè)論文功能性的需求:如界面的美觀,界面使用的流暢度,用戶點擊相應速度,對不同版本的Android系統(tǒng)的

19、兼容性,以及應用的穩(wěn)定性等等。界面的美觀及使用流暢度:界面應該符合大眾的審美觀,而且具有一點的特色。界面之間切換應該平滑流暢,不應該出現(xiàn)明顯的卡頓感。用戶點擊的相應速度:為了保證良好的用戶體驗,應用對用戶的點擊或長按等一系列操作的相應速度不應該超過1s。對不同的Android系統(tǒng)的兼容性:應該盡可能的兼容主流的各個版本的系統(tǒng),更具目前的手機市場上Android系統(tǒng)的情況,本應用應該兼容4.4及以上的Android系統(tǒng)。穩(wěn)定性:用戶正常的操作中,系統(tǒng)能夠正常運行。文件傳輸速度:在正常距離范圍類,傳輸平均總速度應大于3M/S。多任務傳輸:系統(tǒng)應支持多個傳輸任務同時進行,但是為了避免同時傳輸任務過多

20、而引起的系統(tǒng)性能降低,系統(tǒng)應該對同時傳輸?shù)娜蝿諅€數(shù)有限制。系統(tǒng)界面的加載:由于應用中涉及到應用圖標,圖片、電影、音樂等文件的縮略圖的獲取及顯示,為了提升系統(tǒng)的流暢度,系統(tǒng)應采用圖片等耗時資源的異步加載技術。西南科技大學本科生畢業(yè)論文第3章系統(tǒng)概要設計3.1應用模塊劃分及模塊功能介紹根據(jù)需求分析,可以劃分出5個模塊:1)傳輸記錄管理模塊2)數(shù)據(jù)庫操作模塊3)設備連接管理模塊4)文件/數(shù)據(jù)傳輸模塊5)文件管理模塊。每個模塊都具有獨立的完整的功能,模塊之間又具有一定的的聯(lián)系,所有的模塊中,文件的傳輸模塊是核心,它與其他的幾個模塊都存在之間或者間接的關系。模塊之間的關系如圖3-1所示:圖3-1系統(tǒng)各模

21、塊關系圖各個模塊又包含了許多具體的功能:1)傳輸模塊記錄:記錄的管理。2)數(shù)據(jù)庫操作模塊:保存記錄到數(shù)據(jù)庫,讀取數(shù)據(jù)庫中的記錄,更新數(shù)據(jù)庫中的記錄西南科技大學本科生畢業(yè)論文3)設備連接管理模塊:搜索設備,連接設備,斷開設備連接,修改本機名。4)文件/數(shù)據(jù)傳輸模塊:發(fā)送文件/數(shù)據(jù),接收文件/數(shù)據(jù),從對方設備下載文件,自定義文件發(fā)送個數(shù)。5)文件管理模塊:選擇要發(fā)送的文件,移除要發(fā)送的文件,瀏覽本機文件瀏覽對方設備文件目錄(需先連接設備)打開文件,查看文件屬性。如果不區(qū)分模塊,而只看功能,系統(tǒng)功能結構圖如圖3-2所示:自定義同時發(fā)送文件個數(shù)圖3-2應用功能結構圖3.2 應用的數(shù)據(jù)存儲中介軟件是an

22、droid操作系統(tǒng)應用程序的橋梁,主要分為函數(shù)和虛擬機。函數(shù)就是AndoridSDK中的一系列接口,應用開發(fā)會經(jīng)常用到這些接口方法。Android的數(shù)據(jù)存儲采用sqlite數(shù)據(jù)庫系統(tǒng)和文件存儲,用戶可以用ContentProvider類獲取數(shù)據(jù)3。android中數(shù)據(jù)存儲技術主要有:文件存儲、Sharedpreferencesqlite、ContentProvider和網(wǎng)絡存儲,在本軟件中主要使用到了文件存儲和Sharedpreference和sqlite存儲。文件存儲是以流的形式讀寫文件,可以以文格的格式,也可以以二進制的形式,在java語言中要使用流,則寫入文件的對象必須進行序列化,sql

23、ite是嵌入式移動設備中常用的輕量級數(shù)據(jù)庫4。因為程序運行時,保存在內存中的數(shù)據(jù)是暫存的,當應用程序退出后,保存這些數(shù)據(jù)的內存會被系統(tǒng)回收,清除,所以,需要把一些中要的數(shù)據(jù)輸出到文件,或者保存到數(shù)據(jù)庫,或網(wǎng)絡5。西南科技大學本科生畢業(yè)論文3.3 數(shù)據(jù)庫設計3.3.1 Android數(shù)據(jù)庫介紹Android使用開源的、與操作系統(tǒng)無關的數(shù)據(jù)庫一SQLite6。其優(yōu)點如下:輕量級:SQLite和CS模式的數(shù)據(jù)庫軟件不同,它是進程內的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務器。使用SQLite一般只需要帶上它的一個動態(tài)庫,就可以享受它的全部功能。而且那個動態(tài)庫的尺寸也相當小。獨立性:SQLite數(shù)據(jù)

24、庫的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”,所以在使用的時候能夠省去不少麻煩。隔離性:SQLite數(shù)據(jù)庫中的所有信息(比如表、視圖、觸發(fā)器)都包含在一個文件內,方便管理和維護??缙脚_:SQLite數(shù)據(jù)庫支持大部分操作系統(tǒng),除了在電腦上使用的操作系統(tǒng)之外,很多手機操作系統(tǒng)同樣可以運行,比如Android>WindowsMobile>Symbian、Palm等。多語言接口:SQLite數(shù)據(jù)庫支持很多語言編程接口,比如CC+、JavaPython、dotNet、Ruby、Perl等,得到更多開發(fā)者的喜愛。安全性:SQLite數(shù)據(jù)庫通過數(shù)據(jù)庫級上的獨占性和共享鎖來實現(xiàn)獨立事務

25、處理。這意味著多個進程可以在同一時間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只有一個可以寫入數(shù)據(jù)。在某個進程或線程向數(shù)據(jù)庫執(zhí)行寫操作之前,必須獲得獨占鎖定。在發(fā)出獨占鎖定后,其他的讀或寫操作將不會再發(fā)生。3.3.2 本系統(tǒng)數(shù)據(jù)庫設計命名規(guī)則:表名:應用名_表記錄的內容名(如傳輸記錄表名:wifi_direct_records)字段名:字段意義的英文_(如名字:name_)本系統(tǒng)只需要建一張表即可,來保存?zhèn)鬏斢涗?,每一行就是一條記錄Records記錄表字段結構如圖3-3所示圖3-3Records表結構9西南科技大學本科生畢業(yè)論文各個字段的含義如表3-1所示:表3-1Records表字段含義字段名id_name_

26、path_length_state_transfer_lenght_transfer_mac_字段類型Intstringstringstringstringstringstring字段意記錄文件文件文件長傳輸?shù)囊褌鏖L度對方設備的地思id名路徑度狀態(tài)址由于只有一張表,所以數(shù)據(jù)庫的設計比較簡單。3.4 Android開發(fā)相關技術介紹3.4.1 Android的發(fā)展歷史Android系統(tǒng)最開始是由2003在美洲加州成立的一家公司所開發(fā),2005年,google發(fā)現(xiàn)了這款操作系統(tǒng)并且預估其前景極好顧收購注資了該公司,并且加速了Android系統(tǒng)的研發(fā)。2008年9月23日,google官方發(fā)布了And

27、roid1.0。但是1.0的系統(tǒng)還不支持觸摸操作。2009年4月30日,Android1.6發(fā)布,并且創(chuàng)新型的支持了CDMA制式的網(wǎng)絡,也就是說可以支持中國電信了。在Android1.6版本發(fā)布之后不久,google發(fā)布了Android2.0,這個版本后來被視為Android系統(tǒng)發(fā)展史上的里程碑。2010年,Android2.2發(fā)布。同年,Android2.3發(fā)布,最大的優(yōu)點就是支持NFC(近場通訊協(xié)議,是發(fā)展快捷支付消費的方向)。2011年Android4.0發(fā)布,開啟了Android4.x系統(tǒng)的神話級的飛躍,Android系統(tǒng)的使用量急劇增長?,F(xiàn)如今,很多老一點的手機都是基于Android

28、4.x的系統(tǒng)。2014年,Android5.0發(fā)布,代號L,改變了Android系統(tǒng)的UI風格,新增了許多炫酷的動畫效果,啟用了老式的DALVIK虛擬器而采用ART虛擬機,系統(tǒng)流暢度明顯提升。2015年,google繼續(xù)發(fā)力,將Android的版本提升到了6.0,系統(tǒng)原生支持指紋功能,雖然其他的一些基于5.x的第三方系統(tǒng)(如小米MIUI,魅族FLYME等)也支持指紋識別,但是其接口不統(tǒng)一,第三方APP無法一次開發(fā)而在所以的系統(tǒng)中使用指紋功能,而需要針對不同的系統(tǒng)做適配,很麻煩,而在6.0系統(tǒng)中同意了API接口,第三方應用就可以很好的一次開發(fā)而在不同的定制系統(tǒng)中使用指紋功能,這是個很大的改進。A

29、ndroid7.0正式版目前尚未發(fā)布,但是由于Android6.0雖然已經(jīng)發(fā)布一年了,但是現(xiàn)在的手機升級到6.0系統(tǒng)的只有少部分,10西南科技大學本科生畢業(yè)論文原因是那些手機的OEM廠商沒有做相應的升級適配,鑒于這種情況,google據(jù)說會從Android7.0開始逐漸收回系統(tǒng)的升級權限,即由google官方直接推送開級,而不在由OEM廠商來升級了,這對于廣大的Android智能手機用戶來說是個好消息,以后就不用苦苦等手機廠商來升級了7。3.4.2 Android系統(tǒng)結構介紹Android是基于Linux操作系統(tǒng)的一款開源的移動操作系統(tǒng),也可以說Andorid就是Linux上的一個較為復雜的應

30、用程序。Android主要應用與只能手機與平板行業(yè),市場份額高,是全球最大的手機操作系統(tǒng)。Android系統(tǒng)現(xiàn)在發(fā)布的版本穩(wěn)定版本是6.0.1,代號為M。代號為N的7.0.1也在開發(fā)中。Android6.0原生加入了應用的權限管理,加入了指紋模塊并提供給開發(fā)者相應的api,加入了新的省電模式有效的增加了手機的續(xù)航時間等等,相信7.0會加入更多令人激動的新功能。Android系統(tǒng)可以分為4層,如圖3-5所示,由上到下分別是應用層,應用框架層,底層的庫,Linux內核。應用層很簡單,就是所有的Android應用。應用框架層主要是給上層的應用封裝一些API,供其使用。底層的一些庫就是系統(tǒng)的一些必須的

31、庫了,包括動態(tài)連接庫等等。Linux內核主要是集成了一些算法來管理硬件,包含了很多相關的算法,如磁盤調度算法等等網(wǎng)。APPLICATION(應用層)APPLICATIONFRAMWORK(應用框架層)LIBRARIES+AndroidRuntime(系統(tǒng)庫和虛擬機)LINUXKERNEL(LINUX系統(tǒng)內核)圖3-5Android系統(tǒng)結構分層圖11西南科技大學本科生畢業(yè)論文Android系統(tǒng)中由虛擬機來解釋執(zhí)行應用程序,而且每隔應用都由一個單獨的虛擬機來執(zhí)行,且每個應用對應底層Linux系統(tǒng)中的一個進程。這是Android進程間安全的一種機制。Android的虛擬機稱為Dalvik,但從And

32、roid4.4開始,google官方推出了新的虛擬機Art,在4.4系統(tǒng)上,用戶可以選擇使用哪個虛擬機來執(zhí)行應用程序,但是5.0.1系統(tǒng)開始,Android系統(tǒng)徹底放棄了Dalvik虛擬而選擇了Art虛擬機網(wǎng)。原因是Art具有如下的優(yōu)點:1)應用啟動速度變快,體驗更流程,觸感反饋及時。2)更長的電池續(xù)航能力。3)支持更低的硬件。4)系統(tǒng)性能顯著提升。盡管ART虛擬機有一些有點,但是還是有一些缺點。學過java的人知道,java語言編譯出來的是.class類型的中間碼,而Android對其優(yōu)化為.dex格式的中間碼,這也是為什么Android需要虛擬機的原因,因為這些中間碼必須專門的程序來翻譯執(zhí)

33、行。但ART虛擬機與DALVIK虛擬機不同的是,ART虛擬機在應用安裝的時候會將應用的那些中間碼翻譯為機器碼并保存,而DALVIK則是邊翻譯邊執(zhí)行。所以ART相對與DALVIK啟動應用程序的速度更快,運行應用程序更加流暢,但是安裝時間也會更長,也更加暫用存貯空間。3.4.3 Android四大組件Android的四大組建包括:Activity,Service,BraodcastRecevier,ContentProvider。Activity:通俗的將就是應用程序的界面,在Activity上面可以任意的擺放一些控件來達到想要的UI效果。在MVC編程思想中充當VIEW和CONTORLER的角色9

34、。Activity的生命周期如圖3-6所示:在實際應用開發(fā)時,在Activity的幾個重要生命周期函數(shù)里面做一些必要的操作。例如,在onCreate()方法里面,通常會根據(jù)布局的xml文件來生成布局,在onPause()K經(jīng)常會做一些暫停工作,如游戲開發(fā)中,會在onPause()法中來暫停游戲。又如onDestory()方法在Activity銷毀的時候調用,可以在這里做一些保存的工作。Service:即服務,在后臺默默的工作,沒有界面不可見,如后臺音樂播放等一般就是使用的Service。Activity與Service可以有不同的關系,如果Activity直接啟動的Servcie,那么當這個A

35、ctivity結束是,剛才啟動的Service也會結束,12西南科技大學本科生畢業(yè)論文但是如果Activity以綁定的方式啟動Service,那么在Activity結束后,Servcie并不會對應結束10。圖3-6Activity生命周期BraodcastRecevie廿播接收器,用于接收廣播,這是Android系統(tǒng)進程間通信的方法之一。廣播分為系統(tǒng)廣播和自定義廣播,系統(tǒng)廣播是系統(tǒng)發(fā)送的一些重要廣播,如開機完成,電池電量改變等等一些系統(tǒng)活動都會發(fā)送廣播。當然用戶在應用程序也可以自定義發(fā)送一些廣播,然后在另外的地方一用BraodcastRecevier來接收。ContentProvider:這是

36、應用程序間共享數(shù)據(jù)的有效途徑。Android系統(tǒng)中的應用程序都運行在單獨的虛擬機中,對應底層Linux系統(tǒng)中的一個單獨進程,也13西南科技大學本科生畢業(yè)論文就是說應用程序之間的數(shù)據(jù)是相互分開的,這也是Android系統(tǒng)中進程間安全的機制。但是,應用程序有時候就是想把數(shù)據(jù)給別的應用看,如系統(tǒng)中的聯(lián)系人,就會把所有的聯(lián)系人信息利用ContentProvider提供給其他應用程序,對應的,自己的應用程序也可以利用ContentProvider來讀取手機上保存的聯(lián)系人信息。ContentProvider的使用方法和數(shù)據(jù)庫的讀取方式是類似的。14西南科技大學本科生畢業(yè)論文第4章系統(tǒng)詳細設計及實現(xiàn)4.1

37、開發(fā)工具和軟件平臺開發(fā)工具:AndroidStudio,Android的SDK管理器軟件運行平臺:Android4.4及以上4.2 傳輸記錄模塊這個模塊主要是負責管理文件傳輸?shù)挠涗?,包括新增記錄,修改記錄,保存記錄到?shù)據(jù)庫,從數(shù)據(jù)讀取等一些記錄的基本操作。與數(shù)據(jù)庫模塊聯(lián)系非常緊密。程序中主要的文件:1) ./src/provider/RecordManager.java2) ./src/provider/Record.javaRecord時一個實體類,是記錄信息的載體,每個實例就是一條記錄。將傳輸記錄模塊主要封裝到了RecordManager類里面,由這個類提供接口供其他地方使用。其他地方如果

38、想要改變傳輸記錄都通過調用本類的一些方法來操作,而不用直接去操作數(shù)據(jù)庫,操作簡單方便,而且有效的降低了代碼之間的耦合度。由于記錄管理者的特性,本例采用單例模式,并且在主Activity創(chuàng)建的時候初始化這個類的唯一的實例對象。其構造方法如下:publicstaticRecordManagergetInstance(Contextcontext)if(manager=null)/雙重校驗鎖第一鎖synchronized(RecordManager.class)if(manager=null)/雙從校驗鎖第二鎖manager=newRecordManager(context);/從數(shù)據(jù)庫中讀取數(shù)據(jù)m

39、anager.readDB();/從數(shù)據(jù)庫中讀取記錄)一)1returnmanager;15西南科技大學本科生畢業(yè)論文構造方法主要是做了2件事:1)實例化類的唯一對象(單例的體現(xiàn))。2)從數(shù)據(jù)庫中讀取傳輸記錄。這里不得不提的是這里單例的寫法,是采用雙重校驗鎖。這樣的寫法即保證了類對象的唯一性,又保證了多線程同時訪問時的沖突問題,是目前比較推薦的單例模式的寫法之一110下面介紹RecordManager類里面比較重要的一些方法:1)更新數(shù)據(jù)庫:/更新數(shù)據(jù)庫中的記錄privatevoidupdateDB(Recordrecord)I(ContentResolverresolver=context.

40、getContentResolver();ContentValuescontentValues=newContentValues();/放入一行各列的值contentValues.put(Constants.InstanceColumns.ID,record.getId();/放入IDcontentValues.put(Constants.InstanceColumns.NAME,record.getName();/放入名字contentValues.put(Constants.InstanceColumns.PATH,record.getPath();/放入路徑contentValues.p

41、ut(Constants.InstanceColumns.LENGTH,record.getLength();/放入文件大小contentValues.put(Constants.InstanceColumns.TRANSFERLENGTH,record.getTransported_len();/放入文件已傳輸大小contentValues.put(Constants.InstanceColumns.STATE,record.getState();/放入任務當前狀態(tài)contentValues.put(Constants.InstanceColumns.TRANSFERDIRECTION,re

42、cord.getTransport_direction();/放入記錄傳輸方向:發(fā)送/接收contentValues.put(Constants.InstanceColumns.TRANSFERMAC,record.getMac();放入對方設備的MAC地址更新數(shù)據(jù)庫的方法也很簡單,ContentValues表示一行數(shù)據(jù)的值,uri定位到哪一個,及對應一個Record,里用ContentResolover就可以很簡單的更新數(shù)據(jù)庫中對應行的值了。這里的uri在初始化讀取數(shù)據(jù)庫的時候會保存下來。16西南科技大學本科生畢業(yè)論文2)讀取數(shù)據(jù)庫:readDB()/從數(shù)據(jù)庫讀取數(shù)據(jù)privatevoidr

43、eadDB()ContentResolverresolver=context.getContentResolver();Cursorcursor=resolver.query(/從數(shù)據(jù)庫中查詢出包含指定列的記錄Constants.InstanceColumns.CONTENTURI,/數(shù)據(jù)庫的URInewStringConstants.InstanceColumns.IDConstants.InstanceColumns.NAMEConstants.InstanceColumns.PATH,Constants.InstanceColumns.LENGTH,Constants.InstanceC

44、olumns.TRANSFERLENGTHConstants.InstanceColumns.STATEConstants.InstanceColumns.TRANSFER_DIRECTIONConstants.InstanceColumns.TRANSFER_MACwhile(cursor.moveToNext();這個方法只有在RecordManager構造初始化讀取數(shù)據(jù)庫時調用,目的就是為了讀取保存在數(shù)據(jù)庫中的傳輸記錄。4.2.1查看傳輸記錄查看傳輸記錄是系統(tǒng)的關鍵性功能用例,方便用戶查看傳輸記錄。用例描述如表4-1所小。表4-1查看傳輸記錄用例描述功能描述前置條件參與日基本操作流可選操

45、作流查看發(fā)送/接收了哪些文件進入應用主界面用戶1)點擊“歷史”或右滑進入“歷史界面”2)點擊“歷史”界面中相應的分類,查有該分類的記錄17西南科技大學本科生畢業(yè)論文技術關鍵:RecordManager類負責管理傳輸記錄,在退出程序時保存記錄到數(shù)據(jù)庫,進入程序時從數(shù)據(jù)庫讀取記錄列表。歷史界面從RecordManager里面讀取記錄列表并顯示。實際運行截圖如圖4-1所示。2333Q.OOK*日蒙illWifiDirect應用普密電影瀏覽歷史發(fā)送中(0)接收中(0)已iff停(o)已失敗(0)已完成(16)應用音樂電影發(fā)送中(1)3防岳函】8nzM1接收中(1)歷史費送文杵4.3數(shù)據(jù)庫操作模塊已N停

46、(0)已失敗(0)已完成(14)訊費內QOOM1rsQOitSrMSB口期圖4-1查看傳輸記錄截圖imexst-QDffir.這個模塊的作用顧名思義就是對Android的SQLite數(shù)據(jù)庫進行操作,包括表的創(chuàng)建,表內數(shù)據(jù)的增刪改查等等一系列數(shù)據(jù)庫操作。程序中的主要文件:1) .src/provider/WifiDirectContentProvider.java2) .src/provider/WifiDirectDbHelper.java3) .src/Constants.java先從簡單的說起,Constans.java里面就只是定義了一些常量,包括:數(shù)據(jù)庫文件的名字,數(shù)據(jù)庫表的字段,以及

47、一些字段可能的值。publicstaticfinalStringCONTENT_URI_STR="content:/"+AUTHORITY+"/wifi_direct"publicstaticfinalUriCONTENT_URI=Uri.parse("content:/"+AUTHORITY+"/wifi_direct");publicstaticfinalStringID="_id"/記錄IDpublicstaticfinalStringNAME="name"記錄名18w

48、ifiDirect西南科技大學本科生畢業(yè)論文publicstaticfinalStringPATH="_path"/文件路徑publicstaticfinalStringLENGTH="_length"/文件大小publicstaticfinalStringTRANSFER_LENGTH="_tlength”;/已發(fā)送的文件大小publicstaticfinalStringSTATE="_state"/記錄當前的狀態(tài)publicstaticfinalStringTRANSFER_DIRECTION=direction&quo

49、t;/記錄是發(fā)送/接收文件publicstaticfinalStringTRANSFER_MAC="_mac"/對方設備的MAC地址上面的有些字段本來是用來實現(xiàn)斷點續(xù)傳功能的(如TRANSFER_MAC,TRANSFER_LENGTH),但是這個功能會增加雙方數(shù)據(jù)交互的邏輯復雜度,所以暫時放棄了斷點續(xù)傳功能。Andorid中創(chuàng)建數(shù)據(jù)需要繼承SQLiteOpenHelper類,本系統(tǒng)創(chuàng)建數(shù)據(jù)庫的代碼方法如圖4-2所示。privatestaticvoidcreateTable(5QLiteDatabasedb)db.execSQL("CREATETABLE"

50、+Constants.TABLE_fiAME+-('+Constants.Instancecolumns.ID+"INTEGERPRIMARYKEY/+Constants.Instancecolumns.WfF+"TEXTNOTNULL,"-Constants.Instancecolumns.PAffl+"TEXTNOTNULL,"-Constants.Instancecolumns.LE/VG7H+"INTEGERHOTNULL,"+Constants.InstanceColjmns.SMTE+,rINTEGERN

51、OTNULL,”+Constants.InstanceColjmns.TRANSFER_LENGTH+"IhlTEGERNOTNULL,"+Constants.InstanceColumns.TRANSFER_DIRECTION+"INTEGERNOTNULL,"十Constants.InstanceColumns.TRANSFER_MAC+"TEXTNOTNULL)/);LogUtils.i(TAG,"tablecreated'');圖4-2Android創(chuàng)建數(shù)據(jù)庫onCreate(方法有系統(tǒng)回調,在這個方法里面里面

52、建表(這里是通過執(zhí)行SQL語句來建表的)。onUpgrade()方法用于數(shù)據(jù)庫的升級。4.4 文件管理模塊其他模塊跟界面關系就比較大了,主要負責獲取分類文件,打開文件,獲取文件屬性,記錄用戶選擇的要發(fā)送的文件(在發(fā)送時這些文件會傳遞給文件傳輸模塊來處理),瀏覽手機文件夾等。下面是一些關鍵的方法:1)獲取手機內置和外置sdcard路徑返回一個String數(shù)組,0表示內置sdcard路彳1表示外置sdcard路徑,不存在則為null19西南科技大學本科生畢業(yè)論文privatestaticStringgetSDCards(Contextcontext)Stringret=newString2;Str

53、ingexteranl_sd="",inner_sd=""try/利用反射機制調用StorageManager類中的getVolumeList來獲取所有掛在點的信息ClassStorageVolume=Class.forName("android.os.storage.StorageVolume");StorageManagerstorageManager=(StorageManager)context.getSystemService(Context.STORAGE_SERVICE);/獲取系統(tǒng)服務MethodgetVolumeLi

54、st=storageManager.getClass().getMethod("getVolumeList");MethodisRemovable=StorageVolume.getMethod("isRemovable");MethodgetPath=StorageVolume.getMethod("getPath");Object口volumes=(Object)getVolumeList.invoke(storageManager);/獲取所有掛在點信息if(volumes=null)returnret;/根據(jù)各個掛載點的屬性不

55、同來區(qū)分內置sd卡(不可移除),外置sd卡和OTGfor(inti=0;i<volumes.length;i+)if(Boolean)(isRemovable.invoke(volumesi)該掛載點可以移除:可能是外置SD卡或者OTGfinalStringtemp=(String)getPath.invoke(volumesi);if(!temp.contains("usb")exteranl_sd=temp;else/否則,該掛載點不可移除,是內置SD卡inner_sd=(String)getPath.invoke(volumesi);catch(Exceptio

56、ne)e.printStackTrace();ret0=inner_sd;ret1=exteranlsd;20西南科技大學本科生畢業(yè)論文returnret;)雖然系統(tǒng)提供了一個Environment.getExternalDirecty來獲取sdcard,但是經(jīng)過測試你會發(fā)現(xiàn)這個方法并不能區(qū)分獲取到的是內置還是外置sdcad上面的方法是利用Android系統(tǒng)中的一個類StorageVOlume中提供的一些方法來穩(wěn)定獲取內置和外置sdcard的路徑。但是這個類是隱藏的,所以只能使用java的反射機制來調用其中的getVolumeList()方法來獲取所有掛載點信息。內置sdcard不可以移動(或者說是移除)而外置sdcard可以,所以可以通過反射機制獲取isRemovable屬性來區(qū)分內置和外置的sdcard。4.4.1 選擇要發(fā)送的文件選擇文件是發(fā)送文件的基礎,用戶可以自由選擇需要發(fā)送的文件。用例描述如表4-2所小o表4-2選擇要發(fā)送的文件用例描述功能描述前置條件參與日基本操作流可選操作流選擇一些想要發(fā)送的文件,為發(fā)送做準備進入應用主界面用戶1)進入要選擇的文件所在的分類,或進入瀏覽界面

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論