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

下載本文檔

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

文檔簡介

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

2、然后詳細闡述了系統(tǒng)中使用的關(guān)鍵技術(shù)的發(fā)展和相關(guān)知識。通過對系統(tǒng)的運行測試得出可以發(fā)現(xiàn):系統(tǒng)運行流暢,多文件傳輸穩(wěn)定,傳輸速度也很快,滿足用戶需求,具有一定的商業(yè)價值及較強的使用推廣價值。關(guān)鍵詞:WiFi直連;SOCKET通信;文件搜索Design and Implementation of WiFi-Direct File Transfer System on Android PlatformAbstract:With the popularity of smart phones, more and more people will use mobile phones to share fil

3、es, although there are a lot of documents on the market share of the software,but the way they are transferred to determine the existence of a certain. This system is designed to the advantages and disadvantages of the Android Market on a variety of file transfer software, using WiFi-Direct connecti

4、on and socket communication to achieve the file transmission to solve the Bluetooth transmission speed is slow, small NFC data transmission, the transmission network to network traffic or connection, WiFi hotspots transmission cannot use WiFi Internet access and other issues. This application contai

5、ns the file search, management, delete, file / message transfer and other functions. Supports up to 9 files at the same time, in connection with the device, you can browse the file directory of the other equipment.This paper firstly introduces the background and current situation of the selected top

6、ic, and then describes the development of key technologies and related knowledge in detail. Through the operation test of the system obtained can be found: the operation of the system is very stable smooth, multi document transmission is relatively stable, transmission speed is faster, basically mee

7、t the needs of users, has a commercial value and good popularization and use value.KeyWords: Wifi-Direct, socket communication, high-speed transmission目 錄第1章 緒 論11.1引言11.2選題的目的及意義11.3國內(nèi)外相關(guān)研究1第2章 系統(tǒng)需求分析42.1 應(yīng)用需求概述42.2 用戶類與特征42.3 系統(tǒng)功能性需求分析42.4 系統(tǒng)非功能性需求5第3章 系統(tǒng)概要設(shè)計73.1 應(yīng)用模塊劃分及模塊功能介紹73.2 應(yīng)用的數(shù)據(jù)存儲83.3 數(shù)據(jù)庫設(shè)

8、計93.3.1 Android數(shù)據(jù)庫介紹93.3.2本系統(tǒng)數(shù)據(jù)庫設(shè)計93.4 Android開發(fā)相關(guān)技術(shù)介紹103.4.1 Android的發(fā)展歷史103.4.2 Android系統(tǒng)結(jié)構(gòu)介紹113.4.3 Android四大組件12第4章 系統(tǒng)詳細設(shè)計及實現(xiàn)154.1 開發(fā)工具和軟件平臺154.2 傳輸記錄模塊154.2.1 查看傳輸記錄174.3 數(shù)據(jù)庫操作模塊184.4 文件管理模塊194.4.1 選擇要發(fā)送的文件214.4.2 移除要發(fā)送的文件224.4.3 查看文件屬性234.4.4 打開音樂,視頻等文件244.4.5 遍歷手機文件264.5 設(shè)備連接管理模塊274.5.1 連接其他設(shè)

9、備284.5.2 重命名本機設(shè)備304.6 文件/數(shù)據(jù)傳輸模塊314.6.1 設(shè)置同時發(fā)送文件最大個數(shù)334.6.2 發(fā)送文件354.6.3 文件/數(shù)據(jù)傳輸性能364.7 應(yīng)用UI設(shè)計364.7.1應(yīng)用界面框架結(jié)構(gòu)設(shè)計364.7.2主界面的設(shè)計374.7.3 UI控件的使用37第5章 系統(tǒng)測試395.1測試環(huán)境395.2模塊功能測試395.2.1 設(shè)置同時傳輸文件最大個數(shù)功能測試395.2.2 重命名本機設(shè)備功能測試405.2.3 選擇要發(fā)送的文件功能測試415.2.4 移除要發(fā)送的文件功能測試425.2.5 發(fā)送文件功能測試435.2.6 查看傳輸記錄功能測試445.2.7 打開本機音樂,視

10、頻等文件功能測試455.2.8 查看文件屬性功能測試465.2.9 連接設(shè)備功能測試485.3非功能性測試485.3.1 連文件傳輸性能測試485.3.2 系統(tǒng)兼容性測試49結(jié) 論51致 謝52參考文獻53西南科技大學(xué)本科生畢業(yè)論文第1章 緒 論1.1引言隨著近幾年移動行業(yè)的飛速發(fā)展,手機已進入智能時代?,F(xiàn)在的手機智能平臺主要包括Android,IOS,Win10移動版,而用戶最多的還是Andorid和IOS平臺,所以熟悉這些智能平臺的應(yīng)用開發(fā)是必須的。在日常生活中,朋友之間經(jīng)常會分享手機中的一些新鮮的,好玩的,有趣的事情,但是目前的手機端分享方式都存在一些弊端。如常見的網(wǎng)絡(luò)分享,這必須要求用

11、戶雙方都連接互聯(lián)網(wǎng),條件比較苛刻。而藍牙分享雖然不需要聯(lián)網(wǎng),但是傳輸速度比較慢。針對傳輸速度慢的問題,想到了WiFi熱點傳輸,的確這個傳輸速度明顯快于藍牙,但是利用WiFi熱點傳輸時又有一個問題來了,如果要在這時用WiFi上網(wǎng)呢,這就辦不到了。針對各種分享方式的弊端,需要找到一種新的分享來解決這些問題。而新的Wifi直連技術(shù),則能很好地解決上面的那些弊端,具有不需聯(lián)網(wǎng),傳輸速度快,傳輸文件的時候還能WiFi上網(wǎng)的優(yōu)點。如今的Android手機中,進入WiFi高級設(shè)置里面就可以看到有WiFiDirect(WiFi直連)這個東西,但是官方并沒有開發(fā)對應(yīng)的app來傳輸文件,而系統(tǒng)已經(jīng)對WiFi直連這

12、個技術(shù)進行了支持,并封裝了相應(yīng)的api給開發(fā)者使用。1.2選題的目的及意義 根據(jù)目前Android手機平臺的各種分享方式的弊端,找到一種新的分享文件的方式,從而解決NFC傳輸?shù)臄?shù)據(jù)小,藍牙分享速度慢,網(wǎng)絡(luò)分享需聯(lián)網(wǎng),WiFi熱點分享時不能用WiFi上網(wǎng)的問題。本應(yīng)用就是利用WiFi直連技術(shù),來解決目前的一些文件分享方式存在的弊端,從而讓Android智能手機用戶能夠更高效方便的分享文件。實現(xiàn)在高速分享文件的同時利用WiFi高速上網(wǎng)。1.3國內(nèi)外相關(guān)研究582010年10月,Wi-Fi Alliance(wi-fi聯(lián)盟)發(fā)布Wi-Fi Direct白皮書,白皮書中介紹了有關(guān)于這種技術(shù)的基本信息、

13、這種技術(shù)的特點和這種技術(shù)的功能,Wi-Fi Direct標(biāo)準(zhǔn)是指允許無線網(wǎng)絡(luò)中的設(shè)備無需通過無線路由器即可相互連接。與藍牙技術(shù)類似,這種標(biāo)準(zhǔn)允許無線設(shè)備以點對點形式互連,而且在傳輸速度與傳輸距離方面則比藍牙有大幅提升1。按照定義,Wi-Fi CERTIFIEDWi-Fi Direct設(shè)備是支持對等連接的設(shè)備,這種設(shè)備既支持基礎(chǔ)設(shè)施網(wǎng)絡(luò),也支持P2P連接。Wi-Fi Direct設(shè)備能夠作為典型的站點(STA)加入基礎(chǔ)設(shè)施網(wǎng)絡(luò),而且必須支持Wi-Fi Protected Setup加入者功能。Wi-Fi Direct設(shè)備通過組建小組(以一對一或一對多的拓撲形式)來建立連接,小組的工作形式與基礎(chǔ)設(shè)

14、施BSS類似。由一部Wi-Fi Direct設(shè)備負責(zé)整個小組,包括控制哪部設(shè)備加入、小組何時啟動和終止等。這種設(shè)備對于傳統(tǒng)客戶設(shè)備而言就是一部接入點,能夠提供基礎(chǔ)設(shè)施接入點所提供的部分服務(wù)2。最初,Wi-Fi Alliance®聯(lián)盟的這一新標(biāo)準(zhǔn)原名為“Wi-Fi peer-to-peer”,而最終定名為WiFiDirect,面向各種Wi-Fi設(shè)備,從電腦到手機、到電腦外設(shè),到家電等等。符合該標(biāo)準(zhǔn)的設(shè)備無需熱點和路由器,就可以方便的和其他設(shè)備實現(xiàn)直接連接,傳輸數(shù)據(jù)或共享應(yīng)用。Wi-Fi Direct可以支持一對一直連,也可以實現(xiàn)多臺設(shè)備同時連接,并且Wi-Fi Direct標(biāo)準(zhǔn)將會支持所有

15、的Wi-Fi設(shè)備,從11a/b/g至11n,不同標(biāo)準(zhǔn)的Wi-Fi設(shè)備之間也可以直接互聯(lián)。由于WiFiDirect支持設(shè)備間的直接連接,所以又稱為WiFiP2p。P2P架構(gòu)中定義了三個組件, 筆者將其稱為“ 一個設(shè)備, 兩種角色” , 分別如下。 P2P Device: 它是P2P架構(gòu)中角色的實體, 可把它當(dāng)做一個WiFi設(shè)備。 P2P Group Owner: Group Owner( GO) 是一種角色, 其作用類似于Infrastructure BSS中的AP。 P2P Client: 另外一種角色, 其作用類似于Infrastructure BSS中的STA。實際上, P2P技術(shù)模仿了I

16、nfrastructure BSS網(wǎng)絡(luò)結(jié)構(gòu)。 在組建P2P Group( 即P2P Network) 之前, 智能終端都是一個一個的P2P Device。 當(dāng)這些P2P Device設(shè)備之間完成P2P協(xié)商后, 其中將有一個并且只能有一個Device來扮演GO的角色( 即充當(dāng)AP),而其他Device來扮演Client的角色。P2P設(shè)備之間想要互相發(fā)現(xiàn)對方,則需要P2P Discovery的支持.P2P Discovery的作用很簡單, 就是使多個P2P Device能夠互相發(fā)現(xiàn)并構(gòu)建一個Group。 根據(jù)規(guī)范, 它包括四個主要技術(shù)子項。 Device Discovery: 用于P2P設(shè)備搜索周

17、圍其他支持P2P的設(shè)備。 Service Discovery: 該Device Discovery基礎(chǔ)上, P2P還支持搜索指定的服務(wù)。 這部分功能屬于可選項, 筆者覺得它和2.2.5節(jié)中提到的Bonjour類似。 Group Formation: 用于決定兩個P2P Device誰來扮演GO, 誰來扮演Client。 P2P Invitation: 用于激活一個Persistent Group,或者用于邀請一個Client加入一個當(dāng)前已存在的Group。第2章 系統(tǒng)需求分析2.1 應(yīng)用需求概述根據(jù)本應(yīng)用的目標(biāo)可以列出這些需求:1) 能夠選擇要發(fā)送的文件,也能移除不想發(fā)的文件2) 能夠發(fā)送文件

18、(核心需求,要能成功發(fā)送/接受文件)3) 簡單的文件管理(瀏覽,刪除文件等)4) 重命名本機設(shè)備(基本需求,方面手機在傳文件時能夠分辨設(shè)備)5) 查看文件傳輸記錄(核心需求,記錄接受/發(fā)送了哪些文件)6) 查看正在傳輸?shù)奈募顟B(tài)(核心需求)系統(tǒng)功能結(jié)構(gòu)如圖2-1所示。圖2-1 應(yīng)用功能結(jié)構(gòu)圖2.2 用戶類與特征APP用戶:此類用戶主要是使用應(yīng)用來分享文件,并且實時查看傳輸記錄,也可以查看傳輸?shù)臍v史記錄。同時亦可以使用應(yīng)用來對本機設(shè)備進行簡單的管理,如重命名本機設(shè)備,查看本機設(shè)備上的一些文件屬性等等,還是可以預(yù)覽該文件。2.3 系統(tǒng)功能性需求分析根據(jù)對市場上其它分享應(yīng)用的調(diào)查和分析,可以列出應(yīng)用

19、程序的功能用例,系統(tǒng)用例圖如圖2-2所示:圖2-2 系統(tǒng)用例圖2.4 系統(tǒng)非功能性需求開作為一款實用的分享程序,除了基本的功能之外,應(yīng)用還應(yīng)該滿足一些非功能性的需求:如界面的美觀,界面使用的流暢度,用戶點擊相應(yīng)速度,對不同版本的Android系統(tǒng)的兼容性,以及應(yīng)用的穩(wěn)定性等等。界面的美觀及使用流暢度:界面應(yīng)該符合大眾的審美觀,而且具有一點的特色。界面之間切換應(yīng)該平滑流暢,不應(yīng)該出現(xiàn)明顯的卡頓感。用戶點擊的相應(yīng)速度:為了保證良好的用戶體驗,應(yīng)用對用戶的點擊或長按等一系列操作的相應(yīng)速度不應(yīng)該超過1s。對不同的Android系統(tǒng)的兼容性:應(yīng)該盡可能的兼容主流的各個版本的系統(tǒng),更具目前的手機市場上An

20、droid系統(tǒng)的情況,本應(yīng)用應(yīng)該兼容4.4及以上的Android系統(tǒng)。穩(wěn)定性:用戶正常的操作中,系統(tǒng)能夠正常運行。文件傳輸速度:在正常距離范圍類,傳輸平均總速度應(yīng)大于3M/S。多任務(wù)傳輸:系統(tǒng)應(yīng)支持多個傳輸任務(wù)同時進行,但是為了避免同時傳輸任務(wù)過多而引起的系統(tǒng)性能降低,系統(tǒng)應(yīng)該對同時傳輸?shù)娜蝿?wù)個數(shù)有限制。系統(tǒng)界面的加載:由于應(yīng)用中涉及到應(yīng)用圖標(biāo),圖片、電影、音樂等文件的縮略圖的獲取及顯示,為了提升系統(tǒng)的流暢度,系統(tǒng)應(yīng)采用圖片等耗時資源的異步加載技術(shù)。第3章 系統(tǒng)概要設(shè)計3.1 應(yīng)用模塊劃分及模塊功能介紹根據(jù)需求分析,可以劃分出5個模塊:1) 傳輸記錄管理模塊2) 數(shù)據(jù)庫操作模塊3) 設(shè)備連接管

21、理模塊4) 文件/數(shù)據(jù)傳輸模塊5) 文件管理模塊。每個模塊都具有獨立的完整的功能,模塊之間又具有一定的的聯(lián)系,所有的模塊中,文件的傳輸模塊是核心,它與其他的幾個模塊都存在之間或者間接的關(guān)系。模塊之間的關(guān)系如圖3-1所示:圖3-1 系統(tǒng)各模塊關(guān)系圖各個模塊又包含了許多具體的功能:1) 傳輸模塊記錄:記錄的管理。2) 數(shù)據(jù)庫操作模塊:保存記錄到數(shù)據(jù)庫,讀取數(shù)據(jù)庫中的記錄,更新數(shù)據(jù)庫中的記錄。3) 設(shè)備連接管理模塊:搜索設(shè)備,連接設(shè)備,斷開設(shè)備連接,修改本機名。4) 文件/數(shù)據(jù)傳輸模塊:發(fā)送文件/數(shù)據(jù),接收文件/數(shù)據(jù),從對方設(shè)備下載文件,自定義文件發(fā)送個數(shù)。5) 文件管理模塊:選擇要發(fā)送的文件,移除

22、要發(fā)送的文件,瀏覽本機文件,瀏覽對方設(shè)備文件目錄(需先連接設(shè)備)打開文件,查看文件屬性。如果不區(qū)分模塊,而只看功能,系統(tǒng)功能結(jié)構(gòu)圖如圖3-2所示:圖3-2應(yīng)用功能結(jié)構(gòu)圖3.2 應(yīng)用的數(shù)據(jù)存儲中介軟件是android操作系統(tǒng)應(yīng)用程序的橋梁,主要分為函數(shù)和虛擬機。函數(shù)就是AndoridSDK中的一系列接口,應(yīng)用開發(fā)會經(jīng)常用到這些接口方法。Android的數(shù)據(jù)存儲采用sqlite數(shù)據(jù)庫系統(tǒng)和文件存儲,用戶可以用ContentProvider類獲取數(shù)據(jù)3。android中數(shù)據(jù)存儲技術(shù)主要有:文件存儲、Sharedpreference、sqlite、ContentProvider和網(wǎng)絡(luò)存儲,在本軟件中主

23、要使用到了文件存儲和Sharedpreference和sqlite存儲。文件存儲是以流的形式讀寫文件,可以以文格的格式,也可以以二進制的形式,在java語言中要使用流,則寫入文件的對象必須進行序列化,sqlite是嵌入式移動設(shè)備中常用的輕量級數(shù)據(jù)庫4。因為程序運行時,保存在內(nèi)存中的數(shù)據(jù)是暫存的,當(dāng)應(yīng)用程序退出后,保存這些數(shù)據(jù)的內(nèi)存會被系統(tǒng)回收,清除,所以,需要把一些中要的數(shù)據(jù)輸出到文件,或者保存到數(shù)據(jù)庫,或網(wǎng)絡(luò)5。3.3 數(shù)據(jù)庫設(shè)計3.3.1 Android數(shù)據(jù)庫介紹Android使用開源的、與操作系統(tǒng)無關(guān)的數(shù)據(jù)庫SQLite6。其優(yōu)點如下:輕量級:SQLite和CS模式的數(shù)據(jù)庫軟件不同,它是

24、進程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個動態(tài)庫,就可以享受它的全部功能。而且那個動態(tài)庫的尺寸也相當(dāng)小。獨立性:SQLite數(shù)據(jù)庫的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”,所以在使用的時候能夠省去不少麻煩。隔離性:SQLite數(shù)據(jù)庫中的所有信息(比如表、視圖、觸發(fā)器)都包含在一個文件內(nèi),方便管理和維護。跨平臺:SQLite數(shù)據(jù)庫支持大部分操作系統(tǒng),除了在電腦上使用的操作系統(tǒng)之外,很多手機操作系統(tǒng)同樣可以運行,比如Android、Windows Mobile、Symbian、Palm等。多語言接口:SQLite數(shù)據(jù)庫支持很多語言編程

25、接口,比如CC+、Java、Python、dotNet、Ruby、Perl等,得到更多開發(fā)者的喜愛。安全性:SQLite數(shù)據(jù)庫通過數(shù)據(jù)庫級上的獨占性和共享鎖來實現(xiàn)獨立事務(wù)處理。這意味著多個進程可以在同一時間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只有一個可以寫入數(shù)據(jù)。在某個進程或線程向數(shù)據(jù)庫執(zhí)行寫操作之前,必須獲得獨占鎖定。在發(fā)出獨占鎖定后,其他的讀或?qū)懖僮鲗⒉粫侔l(fā)生。3.3.2本系統(tǒng)數(shù)據(jù)庫設(shè)計命名規(guī)則:表名:應(yīng)用名_表記錄的內(nèi)容名(如傳輸記錄表名:wifi_direct_records)字段名:字段意義的英文_(如名字:name_)本系統(tǒng)只需要建一張表即可,來保存?zhèn)鬏斢涗?,每一行就是一條記錄。Record

26、s記錄表字段結(jié)構(gòu)如圖3-3所示。圖3-3 Records表結(jié)構(gòu)各個字段的含義如表3-1所示:表3-1 Records表字段含義字段名id_name_path_length_state_transfer_lenght_transfer_mac_字段類型Intstringstringstringstringstringstring字段意思記錄id文件名文件路徑文件長度傳輸?shù)臓顟B(tài)已傳長度對方設(shè)備的地址由于只有一張表,所以數(shù)據(jù)庫的設(shè)計比較簡單。3.4 Android開發(fā)相關(guān)技術(shù)介紹3.4.1 Android的發(fā)展歷史Android 系統(tǒng)最開始是由2003在美洲加州成立的一家公司所開發(fā),2005年,go

27、ogle發(fā)現(xiàn)了這款操作系統(tǒng)并且預(yù)估其前景極好顧收購注資了該公司,并且加速了Android系統(tǒng)的研發(fā)。2008年9月23日,google官方發(fā)布了Android1.0。但是1.0的系統(tǒng)還不支持觸摸操作。2009年4月30日,Android1.6發(fā)布,并且創(chuàng)新型的支持了CDMA制式的網(wǎng)絡(luò),也就是說可以支持中國電信了。在Android1.6版本發(fā)布之后不久,google發(fā)布了Android2.0,這個版本后來被視為Android系統(tǒng)發(fā)展史上的里程碑。2010年,Android2.2發(fā)布。同年,Android2.3發(fā)布,最大的優(yōu)點就是支持NFC(近場通訊協(xié)議,是發(fā)展快捷支付消費的方向)。2011年An

28、droid4.0發(fā)布,開啟了Android4.x系統(tǒng)的神話級的飛躍,Android系統(tǒng)的使用量急劇增長。現(xiàn)如今,很多老一點的手機都是基于Android4.x的系統(tǒng)。2014年,Android5.0發(fā)布,代號L,改變了Android系統(tǒng)的UI風(fēng)格,新增了許多炫酷的動畫效果,啟用了老式的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)中使用指紋功能,而需

29、要針對不同的系統(tǒng)做適配,很麻煩,而在6.0系統(tǒng)中同意了API接口,第三方應(yīng)用就可以很好的一次開發(fā)而在不同的定制系統(tǒng)中使用指紋功能,這是個很大的改進。Android7.0正式版目前尚未發(fā)布,但是由于Android6.0雖然已經(jīng)發(fā)布一年了,但是現(xiàn)在的手機升級到6.0系統(tǒng)的只有少部分,原因是那些手機的OEM廠商沒有做相應(yīng)的升級適配,鑒于這種情況,google據(jù)說會從Android7.0開始逐漸收回系統(tǒng)的升級權(quán)限,即由google官方直接推送升級,而不在由OEM廠商來升級了,這對于廣大的Android智能手機用戶來說是個好消息,以后就不用苦苦等手機廠商來升級了7。3.4.2 Android系統(tǒng)結(jié)構(gòu)介紹

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

31、單,就是所有的Android應(yīng)用。應(yīng)用框架層主要是給上層的應(yīng)用封裝一些API,供其使用。底層的一些庫就是系統(tǒng)的一些必須的庫了,包括動態(tài)連接庫等等。Linux內(nèi)核主要是集成了一些算法來管理硬件,包含了很多相關(guān)的算法,如磁盤調(diào)度算法等等8。圖3-5 Android系統(tǒng)結(jié)構(gòu)分層圖Android系統(tǒng)中由虛擬機來解釋執(zhí)行應(yīng)用程序,而且每隔應(yīng)用都由一個單獨的虛擬機來執(zhí)行,且每個應(yīng)用對應(yīng)底層Linux系統(tǒng)中的一個進程。這是Android進程間安全的一種機制。Android的虛擬機稱為Dalvik,但從Android4.4開始,google官方推出了新的虛擬機Art,在4.4系統(tǒng)上,用戶可以選擇使用哪個虛擬機

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

33、碼翻譯為機器碼并保存,而DALVIK則是邊翻譯邊執(zhí)行。所以ART相對與DALVIK啟動應(yīng)用程序的速度更快,運行應(yīng)用程序更加流暢,但是安裝時間也會更長,也更加暫用存貯空間。3.4.3 Android四大組件Android的四大組建包括:Activity,Service, BraodcastRecevier,ContentProvider。Activity:通俗的將就是應(yīng)用程序的界面,在Activity上面可以任意的擺放一些控件來達到想要的UI效果。在MVC編程思想中充當(dāng)VIEW和CONTORLER的角色9。Activity的生命周期如圖3-6所示:在實際應(yīng)用開發(fā)時,在Activity的幾個重要生

34、命周期函數(shù)里面做一些必要的操作。例如,在onCreate()方法里面,通常會根據(jù)布局的xml文件來生成布局,在onPause()中,經(jīng)常會做一些暫停工作,如游戲開發(fā)中,會在onPause()方法中來暫停游戲。又如onDestory()方法在Activity銷毀的時候調(diào)用,可以在這里做一些保存的工作。Service:即服務(wù),在后臺默默的工作,沒有界面不可見,如后臺音樂播放等一般就是使用的Service。Activity與Service可以有不同的關(guān)系,如果Activity直接啟動的Servcie,那么當(dāng)這個Activity結(jié)束是,剛才啟動的Service也會結(jié)束,但是如果Activity以綁定的

35、方式啟動Service,那么在Activity結(jié)束后,Servcie并不會對應(yīng)結(jié)束10。圖3-6 Activity生命周期BraodcastRecevier:廣播接收器,用于接收廣播,這是Android系統(tǒng)進程間通信的方法之一。廣播分為系統(tǒng)廣播和自定義廣播,系統(tǒng)廣播是系統(tǒng)發(fā)送的一些重要廣播,如開機完成,電池電量改變等等一些系統(tǒng)活動都會發(fā)送廣播。當(dāng)然用戶在應(yīng)用程序也可以自定義發(fā)送一些廣播,然后在另外的地方一用BraodcastRecevier來接收。ContentProvider:這是應(yīng)用程序間共享數(shù)據(jù)的有效途徑。Android系統(tǒng)中的應(yīng)用程序都運行在單獨的虛擬機中,對應(yīng)底層Linux系統(tǒng)中的一

36、個單獨進程,也就是說應(yīng)用程序之間的數(shù)據(jù)是相互分開的,這也是Android系統(tǒng)中進程間安全的機制。但是,應(yīng)用程序有時候就是想把數(shù)據(jù)給別的應(yīng)用看,如系統(tǒng)中的聯(lián)系人,就會把所有的聯(lián)系人信息利用ContentProvider提供給其他應(yīng)用程序,對應(yīng)的,自己的應(yīng)用程序也可以利用ContentProvider來讀取手機上保存的聯(lián)系人信息。ContentProvider的使用方法和數(shù)據(jù)庫的讀取方式是類似的。第4章 系統(tǒng)詳細設(shè)計及實現(xiàn)4.1 開發(fā)工具和軟件平臺開發(fā)工具:Android Studio,Android的SDK管理器軟件運行平臺:Android4.4及以上4.2 傳輸記錄模塊這個模塊主要是負責(zé)管理文

37、件傳輸?shù)挠涗洠ㄐ略鲇涗?,修改記錄,保存記錄到?shù)據(jù)庫,從數(shù)據(jù)讀取等一些記錄的基本操作。與數(shù)據(jù)庫模塊聯(lián)系非常緊密。程序中主要的文件:1) ./src/provider/RecordManager.java2) ./src/provider/Record.javaRecord時一個實體類,是記錄信息的載體,每個實例就是一條記錄。將傳輸記錄模塊主要封裝到了RecordManager類里面,由這個類提供接口供其他地方使用。其他地方如果想要改變傳輸記錄都通過調(diào)用本類的一些方法來操作,而不用直接去操作數(shù)據(jù)庫,操作簡單方便,而且有效的降低了代碼之間的耦合度。由于記錄管理者的特性,本例采用單例模式,并且在主

38、Activity創(chuàng)建的時候初始化這個類的唯一的實例對象。其構(gòu)造方法如下:public static RecordManager getInstance(Context context) if(manager = null) /雙重校驗鎖第一鎖 synchronized (RecordManager.class) if(manager = null) /雙從校驗鎖第二鎖 manager = new RecordManager(context); /從數(shù)據(jù)庫中讀取數(shù)據(jù) manager.readDB(); /從數(shù)據(jù)庫中讀取記錄 return manager; 構(gòu)造方法主要是做了2件事:1) 實例化類

39、的唯一對象(單例的體現(xiàn))。2) 從數(shù)據(jù)庫中讀取傳輸記錄。這里不得不提的是這里單例的寫法,是采用雙重校驗鎖。這樣的寫法即保證了類對象的唯一性,又保證了多線程同時訪問時的沖突問題,是目前比較推薦的單例模式的寫法之一11。下面介紹RecordManager類里面比較重要的一些方法:1) 更新數(shù)據(jù)庫:/更新數(shù)據(jù)庫中的記錄 private void updateDB(Record record) ContentResolver resolver = context.getContentResolver(); ContentValues contentValues = new ContentValues(

40、); /放入一行各列的值 contentValues.put(Constants.InstanceColumns.ID, record.getId();/放入ID contentValues.put(Constants.InstanceColumns.NAME, record.getName();/放入名字 contentValues.put(Constants.InstanceColumns.PATH, record.getPath();/放入路徑 contentValues.put(Constants.InstanceColumns.LENGTH, record.getLength();/

41、放入文件大小 contentValues.put(Constants.InstanceColumns.TRANSFER_LENGTH, record.getTransported_len();/放入文件已傳輸大小 contentValues.put(Constants.InstanceColumns.STATE, record.getState();/放入任務(wù)當(dāng)前狀態(tài) contentValues.put(Constants.InstanceColumns.TRANSFER_DIRECTION, record.getTransport_direction();/放入記錄傳輸方向:發(fā)送/接收 co

42、ntentValues.put(Constants.InstanceColumns.TRANSFER_MAC, record.getMac();/放入對方設(shè)備的MAC地址更新數(shù)據(jù)庫的方法也很簡單,ContentValues表示一行數(shù)據(jù)的值,uri定位到哪一個,及對應(yīng)一個Record,里用ContentResolover就可以很簡單的更新數(shù)據(jù)庫中對應(yīng)行的值了。這里的uri在初始化讀取數(shù)據(jù)庫的時候會保存下來。2) 讀取數(shù)據(jù)庫:readDB()/從數(shù)據(jù)庫讀取數(shù)據(jù) private void readDB() ContentResolver resolver = context.getContentRe

43、solver(); Cursor cursor = resolver.query(/從數(shù)據(jù)庫中查詢出包含指定列的記錄 Constants.InstanceColumns.CONTENT_URI,/數(shù)據(jù)庫的URI new String Constants.InstanceColumns.ID, Constants.InstanceColumns.NAME, Constants.InstanceColumns.PATH, Constants.InstanceColumns.LENGTH, Constants.InstanceColumns.TRANSFER_LENGTH, Constants.In

44、stanceColumns.STATE, Constants.InstanceColumns.TRANSFER_DIRECTION, Constants.InstanceColumns.TRANSFER_MAC while (cursor.moveToNext(); 這個方法只有在RecordManager構(gòu)造初始化讀取數(shù)據(jù)庫時調(diào)用,目的就是為了讀取保存在數(shù)據(jù)庫中的傳輸記錄。4.2.1 查看傳輸記錄查看傳輸記錄是系統(tǒng)的關(guān)鍵性功能用例,方便用戶查看傳輸記錄。用例描述如表4-1所示。表4-1查看傳輸記錄用例描述功能描述前置條件參與者基本操作流可選操作流查看發(fā)送/接收了哪些文件進入應(yīng)用主界面用戶1)

45、 點擊“歷史”或右滑進入“歷史界面”2) 點擊“歷史”界面中相應(yīng)的分類,查看該分類的記錄技術(shù)關(guān)鍵:RecordManager類負責(zé)管理傳輸記錄,在退出程序時保存記錄到數(shù)據(jù)庫,進入程序時從數(shù)據(jù)庫讀取記錄列表。歷史界面從RecordManager里面讀取記錄列表并顯示。實際運行截圖如圖4-1所示。圖4-1查看傳輸記錄截圖4.3 數(shù)據(jù)庫操作模塊這個模塊的作用顧名思義就是對Android的SQLite數(shù)據(jù)庫進行操作,包括表的創(chuàng)建,表內(nèi)數(shù)據(jù)的增刪改查等等一系列數(shù)據(jù)庫操作。程序中的主要文件:1) .src/provider/WifiDirectContentProvider.java2) .src/provider/WifiDirectDbHelper.java3) .src/Constants.java先從簡單的說起,Constans.java里面就只是定義了一些常量,包括:數(shù)據(jù)庫文件的名字,數(shù)據(jù)庫表的字段,以及一些字段可能的值。public static final String CONTENT_URI_STR = content:/ + AUTHORITY + /wifi_direct;public static final Uri CONTENT_URI = Uri.parse(content:/ + AUTHORITY + /wi

溫馨提示

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

評論

0/150

提交評論