版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 第一章 序言1</b></p><p> 1.1 設(shè)計背景1</p><p> 1.2 設(shè)計目標(biāo)1</p><p> 1.2.1短信群發(fā)1</p><p> 1.2.2來電管家
2、2</p><p> 1.2.3多彩手電筒2</p><p> 1.2.4電蚊香2</p><p> 1.3 項目設(shè)計原則3</p><p> 1.3.1實用性原則3</p><p> 1.3.2可控性原則3</p><p> 1.3.3占用資源少的原則3</p&
3、gt;<p> 1.3.4易擴展性原則3</p><p><b> 1.4設(shè)計框架3</b></p><p> 第二章 系統(tǒng)分析4</p><p> 2.1 需求分析4</p><p> 2.2 技術(shù)可行性4</p><p> 2.2.1面向?qū)ο缶幊碳夹g(shù)4
4、</p><p> 2.2.2程序語言的選擇5</p><p> 2.2.3操作可行性6</p><p> 2.3 環(huán)境可行性分析6</p><p> 2.3.1軟件環(huán)境6</p><p> 2.3.2硬件環(huán)境6</p><p> 2.4 系統(tǒng)結(jié)構(gòu)可行性分析6</p
5、><p> 第三章 系統(tǒng)設(shè)計8</p><p> 3.1 總體設(shè)計8</p><p> 3.2 數(shù)據(jù)庫設(shè)計8</p><p> 3.2.1數(shù)據(jù)庫的需求分析8</p><p> 3.2.2數(shù)據(jù)庫表的具體設(shè)計9</p><p> 3.3 詳細(xì)設(shè)計10</p><
6、;p> 3.3.1目標(biāo)實現(xiàn)10</p><p> 3.3.2具體設(shè)計10</p><p> 3.4 數(shù)據(jù)模塊架構(gòu)圖11</p><p> 3.5 各數(shù)據(jù)模塊詳細(xì)架構(gòu)12</p><p> 3.5.1短信群發(fā)模塊文件架構(gòu)12</p><p> 3.5.2來電管家模塊文件架構(gòu)12</p&
7、gt;<p> 3.5.3電蚊香模塊文件架構(gòu)13</p><p> 3.5.4手電筒架構(gòu)13</p><p> 第四章 系統(tǒng)實現(xiàn)14</p><p> 4.1主界面的實現(xiàn)14</p><p> 4.2短信群發(fā)模塊實現(xiàn)19</p><p> 4.3來電管家模塊實現(xiàn)41</p&g
8、t;<p> 4.4手電筒模塊實現(xiàn)48</p><p> 4.5電蚊香模塊實現(xiàn)50</p><p> 4.6開機啟動程序的實現(xiàn)51</p><p> 4.7系統(tǒng)展望52</p><p> 第五章 系統(tǒng)測試53</p><p> 5.1 測試的定義和目的53</p>&
9、lt;p> 5.2 測試的方法53</p><p> 5.3測試發(fā)現(xiàn)的問題及解決辦法53</p><p> 5.3.1短信群發(fā)測試53</p><p> 5.3.2來電管家測試54</p><p> 5.3.3其他模塊的測試54</p><p><b> 第六章 總結(jié)55<
10、/b></p><p><b> 謝 辭56</b></p><p><b> 參考文獻57</b></p><p><b> 第一章 序言</b></p><p><b> 1.1 設(shè)計背景</b></p><
11、p> 當(dāng)今通訊領(lǐng)域中,手機成為日常生活必不可少的工具,隨著科學(xué)技術(shù)的發(fā)展,智能手機日趨發(fā)展成熟。2007年11月5日,Android手機操作系統(tǒng)脫穎而出,僅推出兩年已超越稱霸十年的諾基亞塞班系統(tǒng),一躍成為全球最受歡迎的智能手機平臺之一。Android系統(tǒng)不但應(yīng)用于智能手機,也在平板電腦市場急速擴張。該系統(tǒng)是基于Linux內(nèi)核的系統(tǒng),早期由Google公司開發(fā),后由開放手持設(shè)備聯(lián)盟(Open Handset Alliance)開發(fā)
12、。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。Android為開源系統(tǒng),開發(fā)靈活性更強,各種軟件層出不窮,發(fā)展前景十分廣闊。</p><p> 智能手機改變?nèi)藗兪褂檬謾C的習(xí)慣,也放大人們對手機的想象。對目前形式的分析和對未來的展望,手機系統(tǒng)已經(jīng)不僅限于通話和短信等內(nèi)容,手機擴展
13、功能日益發(fā)展壯大,利用手機里的各種基本功能,可以拓展更多更實用的軟件,這不僅使用戶更方便的利用手機,而且也激發(fā)了很多編程人員的創(chuàng)新思維。本程序就是利用android手機系統(tǒng)的各種功能實現(xiàn)有創(chuàng)意且實用的手機輔助系統(tǒng)。</p><p><b> 1.2 設(shè)計目標(biāo)</b></p><p> 眾所周知,手機的各項功能都是圍繞用戶的需求而開發(fā)的,以下功能設(shè)計的實現(xiàn)就是按照人
14、們生活中經(jīng)常用到的但系統(tǒng)中沒有的功能,從而為android系統(tǒng)提供更好的用戶體驗。</p><p><b> 1.2.1短信群發(fā)</b></p><p> 1)此項功能不僅可以正常發(fā)送短信,而且可以發(fā)送對方的稱謂。我們國家人民熱情好客,逢年過節(jié)祝福不斷。近幾年隨著移動事業(yè)的發(fā)展,以短信傳遞祝福的方式廣為流傳。而編輯短信逐條發(fā)送很麻煩,短信群發(fā)又感覺沒有誠意,如果可
15、以帶上對方的姓名或昵稱發(fā)送,會讓被祝福者倍感親切。發(fā)送的姓名可以隨意更改,默認(rèn)為聯(lián)系薄里的姓名,選擇后可以改為其他昵稱。</p><p> 2)定時發(fā)送的功能。在緊張忙碌的工作學(xué)習(xí)生活中,難免會遇到待發(fā)送的重要信息被遺忘,或者同一時間有其他的事情要做而耽誤了短信的待發(fā)送。為了避免這些現(xiàn)象的發(fā)生,可以預(yù)先定時進行發(fā)送,而且不會影響非定時短信的發(fā)送。若定時信息未到時間,信息內(nèi)容、發(fā)送時間及聯(lián)系人可以增刪改查,以防止
16、發(fā)送失誤帶來的尷尬。</p><p><b> 1.2.2來電管家</b></p><p> 1)自動回復(fù)功能。當(dāng)用戶有急事來不及或者不方便接聽電話和短信,此功能可以幫用戶及時回復(fù)對方,以便讓對方知道本人的當(dāng)前狀態(tài)或其他內(nèi)容。此功能可以選擇回復(fù)對象、回復(fù)內(nèi)容,也可以選擇對短信回復(fù)、對來電回復(fù)、對短信和來電都回復(fù)。當(dāng)然,為了防止惡意來電,每次啟用該功能后,無論短信還
17、是來電,每人只限一次回復(fù)。</p><p> 2)翻轉(zhuǎn)靜音功能。這是模仿諾基亞手機的一項功能,對于如此暢銷的android系統(tǒng)而言,若沒有此功能確實是個遺憾。用過的人都很清楚此功能的趣味性和實用性,比如在會議室或者其他不方便使用鈴聲的場合,而忘了調(diào)成靜音模式,只要開啟該功能,當(dāng)來電鈴聲響起時,就可以翻轉(zhuǎn)手機快速變?yōu)殪o音模式,從而有效防止打擾他人和避免自己的尷尬。</p><p> 1.
18、2.3多彩手電筒</p><p> 此功能的實現(xiàn)也為該系統(tǒng)增添了趣味性和實用性。一般人們都不會隨身攜帶手電筒,除非必要的時候。但是如果沒有防備時,手頭沒有一個照明的東西,確實帶來危險和不便。而手機是人們生活中都會隨身攜帶的物品之一,如果安裝了該軟件,只要打開屏幕,亮度會自動調(diào)到最大,這會有很好的照明效果。而且內(nèi)設(shè)了多種顏色供用戶選擇,其中有一種為紫色,可以用來模擬紫外線燈進行驗鈔等,雖然不能與真的紫外線燈媲美,
19、但仍有其功效。</p><p><b> 1.2.4電蚊香</b></p><p> 炎熱的夏季,蚊蟲滋生快,被蚊子叮咬確實奇癢難忍,啟動該功能后,手機的音頻外設(shè)會放出讓蚊蟲難以忍受的頻率波段,從而達到驅(qū)蚊的效果;而人耳對此頻率的感應(yīng)能力不是很強。</p><p> 1.3 項目設(shè)計原則</p><p> 1.
20、3.1實用性原則</p><p> 設(shè)計此軟件的初衷是方便用戶使用,本程序的各項功能都是圍繞用戶需求設(shè)計,實用性是此軟件的最基礎(chǔ)原則,圍繞這個基礎(chǔ)進行創(chuàng)新型擴展。</p><p> 1.3.2可控性原則</p><p> 為了方便用戶的使用,每個功能都可由用戶自主控制,參數(shù)也可由用戶自定義,這就迎合了大部分人的使用習(xí)慣,充分體現(xiàn)以人為本。該原則的目的就是軟件適
21、應(yīng)用戶,而不是用戶適應(yīng)軟件。</p><p> 1.3.3占用資源少的原則</p><p> 此軟件是安裝在手機操作系統(tǒng)上使用,因為目前的大部分手機CPU和內(nèi)存都比不上電腦的配置,如何節(jié)省資源開銷已經(jīng)成為手機編程中必不可少的環(huán)節(jié)。</p><p> 1.3.4易擴展性原則</p><p> 此軟件的架構(gòu)是按照可擴展性設(shè)計的,這樣做是為
22、了方便以后升級和擴展更多更實用的功能,易于軟件優(yōu)化,從而使該軟件的靈活性增強,功能更加完善,運行更加穩(wěn)定。</p><p><b> 1.4設(shè)計框架</b></p><p> 此手機輔助系統(tǒng)采用Java語言設(shè)計,在功能上分為四個模塊:短信群發(fā)模塊,來電管家模塊,手電筒模塊,電蚊香模塊。而每個模塊多由界面部分和功能部分組成,除手電筒模塊外,其余模塊均有服務(wù)功能,即后
23、臺運行機制。此系統(tǒng)主要由服務(wù)、廣播和多線程機制有機的統(tǒng)一于一個整體。短信群發(fā)模塊分為界面部分,聯(lián)系人讀取部分,修改列表部分,手機發(fā)送短信機制,定時機制等方面進行設(shè)計與實現(xiàn);來電管家模塊分自動回復(fù)和翻轉(zhuǎn)靜音兩大部分,自動回復(fù)從界面設(shè)計和廣播監(jiān)聽與后臺服務(wù)的結(jié)合進行闡述,翻轉(zhuǎn)靜音從手機擺放角度監(jiān)聽和廣播監(jiān)聽的結(jié)合進行闡述;手電筒模塊主要在屏幕亮度方面著手;電蚊香則從系統(tǒng)后臺播放音樂方面著手。</p><p> 在論
24、文設(shè)計方面,采用從整體到細(xì)節(jié),從重點到難點的寫作思路對該系統(tǒng)的設(shè)計實現(xiàn)進行描述。首先分析了當(dāng)今智能機產(chǎn)業(yè)的發(fā)展背景和前景,介紹了手機輔助系統(tǒng)對用戶工作和生活的影響和用戶對該系統(tǒng)的需求,分析了實現(xiàn)本系統(tǒng)的可行性,而本文章重點內(nèi)容是手機輔助系統(tǒng)的設(shè)計和實現(xiàn)方法,最后對該系統(tǒng)各個功能模塊進行測試評價,論述該系統(tǒng)的優(yōu)缺點和對本軟件的前景展望。在本文中,短信群發(fā)和來電管家模塊將是主要的論述部分。</p><p><b
25、> 第二章 系統(tǒng)分析</b></p><p><b> 2.1 需求分析</b></p><p> 在智能手機日益發(fā)展壯大的今天,手機輔助系統(tǒng)使智能手機功能的多樣化和人性化成為可能。通過手機輔助系統(tǒng),我們可以更方便的應(yīng)用和整合手機的各種軟硬件,拓展出更多更實用的功能。通過手機輔助系統(tǒng)中的短信群發(fā),我們可以更方便的發(fā)送帶有稱謂的短信,從而提升在
26、人際關(guān)系中的友好程度和在好友圈中的受歡迎程度;通過手機輔助系統(tǒng)中的來電助手,我們可以隨心所欲的定制自動回復(fù)功能,避免無人接聽給對方帶來的擔(dān)憂,使智能手機更加人性化;通過手機輔助系統(tǒng)中的手電筒,可以為我們照亮光線不好的環(huán)境,如無電燈的樓梯,這樣可以有效的避免黑暗為我們帶來的不便,而且又不必隨身攜帶手電,實現(xiàn)一機多用;通過手機輔助系統(tǒng)中的電蚊香,我們可以在多蚊蟲的環(huán)境中避免被蚊蟲叮咬而帶來的痛苦,從而使我們不必分散精力,提高工作和學(xué)習(xí)效率。
27、</p><p> 2.2 技術(shù)可行性</p><p> 2.2.1面向?qū)ο缶幊碳夹g(shù)</p><p> 面向?qū)ο蟪绦蛟O(shè)計(Object-Oriented Programming)是一種起源于六十年代,發(fā)展已經(jīng)將近三十年的程序設(shè)計思想。其自身理論已十分完善,并被多種面向?qū)ο蟪绦蛟O(shè)計語言(Object-Oriented Programming Language)
28、實現(xiàn)。對象是對現(xiàn)實世界實體的模擬,由現(xiàn)實實體的過程或信息特性來定義。一個對象可被認(rèn)為是一個把數(shù)據(jù)(屬性)和程序(方法)封裝在一起的實體,這個程序產(chǎn)生該對象的動作或?qū)λ邮艿降耐饨缧盘柕姆磻?yīng)。這些對象操作有時稱為方法。區(qū)別面向?qū)ο蟮拈_發(fā)和傳統(tǒng)過程的開發(fā)的要素有:對象識別和抽象、封裝、多態(tài)性和繼承。</p><p> 面向?qū)ο蟮暮诵氖菍︻惖膽?yīng)用。在本程序中大量用到面向?qū)ο蠹夹g(shù),每個功能的實現(xiàn)都離不開對以下類的繼承:
29、Activity(動作類)、Services(服務(wù)類)和Broadcast(廣播類)。這些類均在Android SDK中提供接口。</p><p> Activity:android系統(tǒng)與用戶進行交互的接口,用戶對android系統(tǒng)進行操作都是通過activity類來完成。此類要依附于界面,對用戶是可見的。</p><p> Services:與Activity類似,區(qū)別在于不用依附于
30、見面,可以后臺運行動作指令。</p><p> Broadcast:系統(tǒng)每運行一個事件都會觸發(fā)一個廣播,通過廣播監(jiān)聽器可以對相應(yīng)事件做出反應(yīng)。</p><p> 2.2.2程序語言的選擇</p><p><b> Java ME</b></p><p> Java ME(Java Platform,Micro E
31、dition),這個版本以前稱之為 J2ME。J2ME 為在移動設(shè)備和嵌入式設(shè)備(比如手機、PDA、電視機頂盒等)上運行的應(yīng)用程序提供一個健壯且靈活的環(huán)境。Java ME 在用戶界面、網(wǎng)絡(luò)協(xié)議、安全模型等方面具有很強的靈活性和穩(wěn)定性。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次,就能夠用于許多設(shè)備,而且可以利用每個設(shè)備的本機功能。Java語言提供類的繼承,Android系統(tǒng)的編程就很好的利用了這一性質(zhì)??傊?,Java語言是一個面向?qū)?/p>
32、象的程序設(shè)計語言。這種優(yōu)良的特性使Java應(yīng)用程序具有無比的健壯性和靈活性,而且通過內(nèi)置的API(應(yīng)用程序接口)可大大節(jié)省資源開銷,提高編程效率。</p><p> 本系統(tǒng)是基于Android開發(fā)平臺的軟件,因為Android頂層的應(yīng)用軟件大部分都是用java語言開發(fā),而要與系統(tǒng)進行關(guān)聯(lián),不可避免的用到了Android SDK提供的API,通過此API可將該軟件與Android系統(tǒng)有機的融合為一個整體。<
33、/p><p><b> XML</b></p><p> XML即可擴展標(biāo)記語言,是一種簡單數(shù)據(jù)存儲語言,類似于HTML,都是標(biāo)準(zhǔn)通用標(biāo)記語言。Xml是在Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。XML與HTML的不同點是:XML的主要作用是存儲數(shù)據(jù),而HTML是用來定義數(shù)據(jù)的。擴展標(biāo)記語言XML使用一系列簡單的標(biāo)記描述數(shù)據(jù)
34、,建立和保存數(shù)據(jù)比較方便。雖然XML占用的空間相對于二進制數(shù)據(jù)存儲占用的空間更多,但XML極其簡單易于掌握和使用。</p><p> 在Android編程中,要用XML文件進行界面布局設(shè)置。本程序不僅用XML文件設(shè)置界面,也用它作為數(shù)據(jù)庫存儲數(shù)據(jù)(Preference存儲模式)。</p><p> 2.2.3操作可行性</p><p> 本系統(tǒng)只要求具有一定的
35、手機操作經(jīng)驗,因為Android系統(tǒng)本身操作就很簡單,本程序中全部的控件均繼承自Android,所以用戶對控件本身的操作不會陌生。在本程序中,每進行一步操作都會有相應(yīng)的提示,而且每個功能界面都會提供幫助信息,只要有一點手機操作經(jīng)驗,看過提示后,對本軟件的操作就會非常清楚。</p><p> 2.3 環(huán)境可行性分析</p><p><b> 2.3.1軟件環(huán)境</b>
36、;</p><p> 軟件運行環(huán)境:Android操作系統(tǒng) 2.1 update1版本</p><p><b> 語言環(huán)境:簡體中文</b></p><p> 編譯環(huán)境:Windows7 32bit操作系統(tǒng)</p><p> 編譯工具:Eclipse 3.6+Android SDK</p><
37、p><b> 2.3.2硬件環(huán)境</b></p><p> 軟件測試機型:三星GT-I5508</p><p> 編譯環(huán)境:聯(lián)想天逸 F41a, CPU IntelCore2 1.67GHz,RAM 2G</p><p> 2.4 系統(tǒng)結(jié)構(gòu)可行性分析</p><p> Android SDK 提供了一個視
38、圖控件——GridView,用于以網(wǎng)格的形式陳列內(nèi)容。本軟件利用此結(jié)構(gòu),以功能為單位將各圖標(biāo)和名稱陳列于此視圖中,這種結(jié)構(gòu)的優(yōu)點是使軟件界面簡潔大方,對各功能一目了然,易于用戶操作,是一種人性化的界面設(shè)計格式;另一方面,這種結(jié)構(gòu)形式有利于軟件開發(fā)過程中進行軟件管理,增加新功能,刪除無用功能。</p><p><b> 第三章 系統(tǒng)設(shè)計</b></p><p><
39、;b> 3.1 總體設(shè)計</b></p><p> 本系統(tǒng)的主要任務(wù)是輔助手機用戶更方便的管理和使用手機的各項基本功能,主要分為一下幾個功能模塊:主界面模塊,短信群發(fā)模塊,手機照明模塊,來電管理模塊,電蚊香模塊。模型結(jié)構(gòu)如圖3.1所示:</p><p> 圖3.1 手機輔助系統(tǒng)結(jié)構(gòu)圖</p><p><b> 3.2 數(shù)據(jù)庫設(shè)計&
40、lt;/b></p><p> 3.2.1數(shù)據(jù)庫的需求分析</p><p> 根據(jù)項目的需要,本系統(tǒng)將建立如下數(shù)據(jù)庫表單:</p><p> 來電管家界面表單(fm.app.aa_preferences.xml):用于存儲來電管家的設(shè)置參數(shù);</p><p> 電蚊香狀態(tài)表單(MosPre.xml):用于存儲電蚊香功能的開啟狀態(tài)
41、;</p><p> 短信群發(fā)狀態(tài)表單(SmssPre.xml):主要用于存儲定時發(fā)短信的參數(shù);</p><p> 本程序狀態(tài)表單(AAPre.xml):主要存儲本程序中各個功能的開啟狀態(tài),可使手機重啟后能繼續(xù)運行相應(yīng)程序。</p><p> 3.2.2數(shù)據(jù)庫表的具體設(shè)計</p><p> 表3.1來電管家界面表單(fm.app.aa
42、_preferences.xml)</p><p> 表3.2電蚊香狀態(tài)表單(MosPre.xml)</p><p> 表3.3短信群發(fā)狀態(tài)表單(SmssPre.xml)</p><p> 表3.4本程序狀態(tài)表單(AAPre.xml)</p><p><b> 3.3 詳細(xì)設(shè)計 </b></p>&
43、lt;p><b> 3.3.1目標(biāo)實現(xiàn)</b></p><p> 本系統(tǒng)主要目的是輔助用戶更方便地使用手機,突出實用功能。具體地講,本系統(tǒng)通過手機固有的接口,從短信功能、來電管理功能,照明功能、避蚊功能(播放功能)出發(fā),實現(xiàn)輔助作用,充分發(fā)揮智能機的優(yōu)點,將實用性盡可能擴展到最大。具體實現(xiàn)如下目標(biāo):</p><p><b> 短信群發(fā)功能<
44、/b></p><p><b> 手機照明功能</b></p><p><b> 自動回復(fù)功能</b></p><p><b> 翻轉(zhuǎn)靜音功能</b></p><p><b> 電蚊香功能</b></p><p>
45、可后臺運行,建立服務(wù)架構(gòu)</p><p> 重啟后仍然有效,實現(xiàn)開機啟動</p><p><b> 運行安全可靠穩(wěn)定</b></p><p><b> 占用盡可能少的資源</b></p><p> 適合各種手機屏幕分辨率</p><p> 對Aandroid各種版本
46、兼容性強</p><p><b> 3.3.2具體設(shè)計</b></p><p> 手機輔助系統(tǒng)是基于Android 系統(tǒng)平臺下的應(yīng)用軟件,針對Android手機用戶開發(fā)。主要的功能模塊有:短信群發(fā),來電管家,多彩手電筒,電蚊香。以下是對各個功能模塊的具體設(shè)計:</p><p> 短信群發(fā):主要包括群發(fā)短信,定時群發(fā),可插入稱謂,對所選聯(lián)系
47、人的刪除和修改操作。</p><p> 來電管家:對來電和短信自動回復(fù),可以自定義回復(fù)事件是來電還是短信,可以自定義回復(fù)內(nèi)容,可以自定義回復(fù)對象是好友還是全部回復(fù),重啟仍然可以正常運行。</p><p> 多彩手電筒:屏幕亮度為最大,避免手機進入待機狀態(tài),顏色可由用戶選擇,增加紫色驗鈔光。</p><p> 電蚊香:播放驅(qū)蚊聲波,可后臺運行,若功能打開,重啟后
48、仍然有效。</p><p> 3.4 數(shù)據(jù)模塊架構(gòu)圖</p><p> 此圖為本軟件的總架構(gòu)圖,顯示了各個功能模塊之間的關(guān)系和后臺服務(wù)和前臺操作的關(guān)系, 簡單闡明了系統(tǒng)運行的機制,具體結(jié)構(gòu)如圖3.2所示:</p><p> 圖3.2 系統(tǒng)數(shù)據(jù)模塊架構(gòu)圖</p><p> 3.5 各數(shù)據(jù)模塊詳細(xì)架構(gòu)</p><p&g
49、t; 3.5.1短信群發(fā)模塊文件架構(gòu)</p><p> 短信群發(fā)模塊通過SmssContact.java調(diào)用系統(tǒng)中的聯(lián)系人列表;當(dāng)啟動定時服務(wù)時,通過AlarmManager觸發(fā)SmssService后臺服務(wù)發(fā)送短信,當(dāng)觸發(fā)服務(wù)的同時,將開機項目表單中的短信定時服務(wù)狀態(tài)改為活動狀態(tài),如下圖3.3所示:</p><p> 圖3.3短信群發(fā)模塊運行架構(gòu)示意圖</p><
50、;p> 3.5.2來電管家模塊文件架構(gòu)</p><p> 來電管家模塊分為自動回復(fù)和翻轉(zhuǎn)靜音兩個功能,通過設(shè)置界面(PreferenceScreen)可由用戶直接啟動兩個功能,對設(shè)置的更改觸發(fā)事件,運行相應(yīng)的服務(wù),并且更新開機啟動項表單的信息,以便開機后仍然可以正常運行。</p><p> 啟動自動回復(fù)功能后,服務(wù)中會建立用來監(jiān)聽來電或短信的廣播監(jiān)聽器,當(dāng)來電或來短信時,程序讀
51、取電話號碼,根據(jù)用戶的自定義設(shè)置進行相應(yīng)的回復(fù)動作;啟動翻轉(zhuǎn)靜音功能后,即啟動了含有監(jiān)聽來電廣播監(jiān)聽器的服務(wù),原理同上,當(dāng)來電時,觸發(fā)來電廣播監(jiān)聽器,而其中又注冊了一個監(jiān)聽手機角度的類模塊,若此時手機角度小于-120°,即手機翻轉(zhuǎn)過來,就進行相應(yīng)的靜音操作。運行機制可用圖3.4表示:</p><p> 圖3.4來電管家模塊運行架構(gòu)示意圖</p><p> 3.5.3電蚊香模塊
52、文件架構(gòu)</p><p> 電蚊香模塊的原理是通過系統(tǒng)從后臺循環(huán)播放一段音頻波段,此模塊設(shè)計比較簡單,運行架構(gòu)如下圖3.5所示:</p><p> 圖3.5電蚊香模塊運行架構(gòu)示意圖</p><p> 3.5.4手電筒架構(gòu)</p><p> 手電筒的實現(xiàn)較為簡單,啟用該功能后,程序首先保存當(dāng)前的亮度,然后將亮度調(diào)到最大,并全屏顯示,背景
53、顏色默認(rèn)為白色。退出該功能后將屏幕亮度參數(shù)恢復(fù)到之前的值。運行機制如圖3.6所示:</p><p> 圖3.6手電筒運行示意圖</p><p><b> 第四章 系統(tǒng)實現(xiàn)</b></p><p> 此系統(tǒng)分為四個模塊分別進行實現(xiàn),這些模塊既相互獨立,又相互聯(lián)系。所謂相互獨立,是指各功能之間是平行關(guān)系,功能之間沒有必然的聯(lián)系;所謂相互聯(lián)系,
54、是指通屬于一個主界面控制,使整個系統(tǒng)成為一個有機的整體。下面分別介紹各模塊的實現(xiàn)代碼及效果圖。</p><p><b> 4.1主界面的實現(xiàn)</b></p><p> 此部分的代碼在AA.java中,用來顯示所有功能模塊,以便進入相應(yīng)模塊進行操作。此界面采用GridView布局,使界面簡潔大方,一目了然,充分體現(xiàn)人性化設(shè)計理念。</p><p&
55、gt; 首先要建立一個GridView的適配器布局,用來定義GridView的格式,本程序中用上圖標(biāo)下文字的顯示方式,此代碼在layout/grid.xml文件中,實現(xiàn)代碼如下:</p><p> <LinearLayout</p><p> android:orientation="vertical"</p><p><b&g
56、t; ……</b></p><p><b> ></b></p><p> <ImageView </p><p> android:id="@+id/icon"</p><p><b> ……</b></p><p>&
57、lt;b> /></b></p><p> <TextView </p><p> android:id="@+id/text"</p><p><b> ……</b></p><p><b> /></b></p>&
58、lt;p> </LinearLayout></p><p> 建立GridView適配器文件(AAGridViewAdapter.java)</p><p> /*創(chuàng)建GridView方法*/</p><p> public View getView(int position, View convertView, ViewGroup par
59、ent) {</p><p> LayoutInflater factory=LayoutInflater.from(_con);</p><p> /*使用grid.xml定義每個item的Layout*/</p><p> View v=(View)factory.inflate(R.layout.grid, null);</p><p
60、> /*取得View*/</p><p> ImageView iv=(ImageView)v.findViewById(R.id.icon);</p><p> TextView tv=(TextView)v.findViewById(R.id.text);</p><p> /*設(shè)置顯示的Image與文字*/</p><p>
61、; iv.setImageResource(_icons[position]);</p><p> tv.setText(_items[position]);</p><p><b> return v;</b></p><p><b> }</b></p><p> 建立主界面的布局,采
62、用相對布局(RelativeLayout),在其中包含一個GridView,設(shè)置每行顯示的數(shù)量為3:</p><p> <?xml version="1.0" encoding="utf-8"?></p><p> <RelativeLayout </p><p><b> xmlns:&l
63、t;/b></p><p><b> ……</b></p><p> android:background="@drawable/aabackground0"</p><p><b> ></b></p><p><b> <GridView&
64、lt;/b></p><p> android:id="@+id/GridView_aa"</p><p><b> ……</b></p><p> android:numColumns="3"<!-顯示3列-></p><p><b> /&g
65、t;</b></p><p> </RelativeLayout></p><p> 將做好的圖標(biāo)存到工程文件夾下的res/drowable中,聲明圖標(biāo)數(shù)組和相對應(yīng)的字符數(shù)組:</p><p> //定義GridView的圖標(biāo)</p><p> private int[] icons={</p>
66、<p> R.drawable.message,</p><p> R.drawable.light,</p><p> R.drawable.manager,</p><p> R.drawable.mos</p><p><b> };</b></p><p> //定義
67、GridView的顯示文字</p><p> private int[] items={</p><p> R.string.aa_smss,</p><p> R.string.aa_light,</p><p> R.string.aa_manager,</p><p> R.string.aa_mos&
68、lt;/p><p><b> };</b></p><p> 將適配器與圖標(biāo)和文字進行連接</p><p> gv=(GridView)findViewById(R.id.GridView_aa);//定義一個GridView對象</p><p> /*使用自定義的AAGridViewAdapter設(shè)置GridVie
69、w里面的Item內(nèi)容*/</p><p> AAGridViewAdapter gv_adapter=new AAGridViewAdapter(this,items,icons);</p><p> gv.setAdapter(gv_adapter);</p><p> 聲明一個click點擊事件,用于用戶點擊相應(yīng)圖標(biāo)進入對應(yīng)的功能模塊,因為每個GridVi
70、ew都有一個position,我們可以用這個變量辨別用戶單擊的是哪個圖標(biāo):</p><p> public void onItemClick(AdapterView<?> parent, View v, int position,</p><p> long arg3) {</p><p> Intent intent=new Intent();&
71、lt;/p><p> switch(position){</p><p> case 0://進入短信群發(fā)</p><p> intent.setClass(AA.this,Smss.class);</p><p> startActivity(intent);</p><p><b> break;&
72、lt;/b></p><p> case 1://進入手電筒</p><p> intent.setClass(AA.this,Light.class);</p><p> startActivity(intent);</p><p><b> break;</b></p><p>
73、 case 2://進入通信管家</p><p> intent.setClass(AA.this,Manager.class);</p><p> startActivity(intent);</p><p><b> break;</b></p><p> case 3://進入電蚊香</p>
74、<p> intent.setClass(AA.this,Mos.class);</p><p> startActivity(intent);</p><p><b> break;</b></p><p><b> default:</b></p><p><b>
75、 break;</b></p><p><b> }</b></p><p><b> }</b></p><p> 主界面的顯示部分到此結(jié)束,效果如圖4.1:</p><p> 圖4.1主界面的效果圖</p><p> 在主界面內(nèi)建立一個“關(guān)于”對話
76、窗口,按MENU鍵打開,里面存放軟件的信息。先聲明一個MENU菜單:</p><p> public boolean onCreateOptionsMenu(Menu menu) {</p><p> // TODO 等待其他選項加入</p><p> menu.add(0, 0, 0, R.string.str_about);</p><
77、p> return super.onCreateOptionsMenu(menu);</p><p><b> }</b></p><p> 建立點擊事件,每個點擊對象都有一個ID,在此只建立一個MENU對象,當(dāng)點擊后打開關(guān)于對話窗口:</p><p> public boolean onOptionsItemSelected(M
78、enuItem item) {</p><p> // TODO 等待其他選項動作加入</p><p> super.onOptionsItemSelected(item);</p><p> switch(item.getItemId()){</p><p><b> case 0:</b></p>
79、<p> helpDialog();//在此調(diào)用“關(guān)于”對話窗口</p><p><b> break;</b></p><p><b> }</b></p><p> return true;</p><p><b> }</b></p>
80、<p> 對話窗口的實現(xiàn)很簡單,實例化一個AlertDialog對象即可:</p><p> private void helpDialog(){</p><p> new AlertDialog.Builder(this)</p><p> .setTitle(R.string.str_about)</p><p>
81、.setMessage(R.string.app_about)</p><p> .setPositiveButton(R.string.str_ok,</p><p> new DialogInterface.OnClickListener(){</p><p> public void onClick(DialogInterface arg0, int a
82、rg1) {</p><p><b> }</b></p><p> }).show();</p><p> 顯示效果如圖4.2所示:</p><p> 圖4.2關(guān)于對話框的顯示</p><p> 需要注意的是,本程序的文本顯示內(nèi)容,如以上代碼中的“R.string.str_about”
83、均存放在res/values/strings.xml文件里,這樣做的好處是便于更改文字內(nèi)容,可方便實現(xiàn)語言的轉(zhuǎn)換。當(dāng)然,目前只有中文,可根據(jù)需要,只要將該文件里的中文翻譯為其他語言即可更改為另一個語言版本的軟件。</p><p> 4.2短信群發(fā)模塊實現(xiàn)</p><p> 短信群發(fā)功能分一下幾個部分實現(xiàn):主界面部分,添加聯(lián)系人,聯(lián)系人稱謂的刪除和修改,短信群發(fā)系統(tǒng),插入聯(lián)系人稱謂,定時
84、服務(wù)系統(tǒng)。此部分的主要功能是群發(fā)短信并可由用戶自定義是否發(fā)送稱謂,也可選擇定時發(fā)送,可實現(xiàn)定時發(fā)送與即時發(fā)送互不影響。</p><p><b> ·短信群發(fā)的主界面</b></p><p> 此功能模塊界面實現(xiàn)的主要難點在于listview的重寫方法,listview是以可滾動列表的形式顯示固定格式的內(nèi)容,在此模塊中,用以顯示已選好的聯(lián)系人姓名。<
85、/p><p> 首先是界面布局,是以相對布局(RelativeLayout)實現(xiàn)的。之所以采用這種布局,是為了符合各個屏幕的分辨率,不會因為屏幕的大小而使其內(nèi)容的位置改變,符合大眾化的需求。代碼在Smss.xml中:</p><p> <RelativeLayout</p><p><b> ……</b></p><
86、p><b> ></b></p><p> <!-- 采用相對關(guān)系布局 --></p><p> <ToggleButton</p><p><b> ……</b></p><p> <!-此控件的上邊緣和左邊緣與系統(tǒng)的上邊緣和左邊緣內(nèi)對齊->&l
87、t;/p><p> android:layout_alignParentRight="true"</p><p> android:layout_alignParentTop="true"</p><p><b> /></b></p><p><b> <
88、;Button</b></p><p><b> ……</b></p><p> <!-此控件的上邊緣和左邊緣與系統(tǒng)的上邊緣和左邊緣內(nèi)對齊-></p><p> android:layout_alignParentTop="true"</p><p> android:
89、layout_alignParentLeft="true"</p><p><b> ……</b></p><p><b> /></b></p><p><b> ……</b></p><p> ListView 所在的部分在“選擇聯(lián)系人”與
90、“信息發(fā)送文本框”之間,scrollbar=“vertical”表示以垂直方式陳列:</p><p><b> ……</b></p><p> <LinearLayout </p><p> android:layout_below="@id/btn_smss_select"</p><p&g
91、t; android:layout_above="@id/etxt_smss_messageback"</p><p><b> ……</b></p><p><b> ></b></p><p> <ListView android:id="@+id/smslv"
92、;</p><p><b> ……</b></p><p> android:drawSelectorOnTop="false"</p><p> android:scrollbars="vertical"> </p><p> </ListView>&l
93、t;/p><p> </LinearLayout></p><p> </RelativeLayout></p><p> 幾乎所有的自定義ListView都要使用適配器定義格式,在此也不例外,文件為SmssAdapter.java。與之前的適配器建立步驟一樣,首先建立適配器布局文件,名為smslv.xml,同樣采用相對布局,格式為并列的兩
94、個TextView:</p><p> <RelativeLayout</p><p> …… ></p><p> <TextView android:id="@+id/txt_smss_name"</p><p><b> ……</b></p>
95、<p> android:layout_alignParentLeft="true"</p><p><b> /></b></p><p> <TextView android:id="@+id/txt_smss_report" </p><p><b> ……
96、</b></p><p> android:layout_alignParentRight="true"</p><p><b> /></b></p><p> </RelativeLayout></p><p> 下面就要定義適配器,繼承系統(tǒng)的SimpleAd
97、apter類,引用上面提到的布局格式,代碼寫在SmssAdapter.java文件中:</p><p> public View getView(int position, View convertView, ViewGroup parent) {</p><p> if (convertView == null) {</p><p> convertView
98、 = mInflater.inflate(R.layout.smslv, null);</p><p><b> }</b></p><p> TextView tN = (TextView) convertView.findViewById(R.id.txt_smss_name);</p><p> tN.setText((String
99、) mList.get(position).get(SELECTED_NAME));</p><p> TextView tR = (TextView) convertView.findViewById(R.id.txt_smss_report);</p><p> tR.setText((String) mList.get(position).get(SEND_REPORT));&l
100、t;/p><p> return convertView;</p><p><b> }</b></p><p> 此時短信群發(fā)界面的已選擇聯(lián)系人列表建立完成了,這個ListView中的內(nèi)容就是從選擇聯(lián)系人界面選擇的聯(lián)系人姓名。因為先要進入子頁面選擇聯(lián)系人,而后返回父窗體時顯示內(nèi)容,所以用startActivityForResult拋出,用此
101、方法返回父窗體就會執(zhí)行onActivityResult()方法:</p><p><b> ……</b></p><p> startActivityForResult(intent,0);</p><p><b> ……</b></p><p> protected void onAct
102、ivityResult(int requestCode, int resultCode, Intent data) {</p><p> super.onActivityResult(requestCode, resultCode, data);</p><p> listView = (ListView)findViewById(R.id.smslv);</p><
103、;p> switch(resultCode){</p><p> case RESULT_OK:</p><p><b> ……</b></p><p><b> default:</b></p><p><b> break;</b></p>&
104、lt;p><b> }</b></p><p><b> ……</b></p><p><b> }</b></p><p> 此模式的原理是子頁面將選擇的內(nèi)容存入ArrayListExtra空間的變量中,然后用getStringArrayListExtra將內(nèi)容取出,子頁面存入方法在接
105、下來的部分中介紹,以下為父頁面取出記錄的內(nèi)容,記錄為所選的用戶名和相應(yīng)的電話號碼,取出后將內(nèi)容分別存放在arraylist變量name和phone中:</p><p> name=data.getStringArrayListExtra("str_name");</p><p> phone=data.getStringArrayListExtra("st
106、r_phone");</p><p> name.trimToSize();//節(jié)省資源開銷</p><p> phone.trimToSize();</p><p> 將用來顯示的arraylist(這里實例化為al1)變量清空,以防重復(fù)顯示:</p><p> al1.clear();</p><p&
107、gt; 定義哈希map,此格式變量以鍵值對的形式存儲內(nèi)容,下面用循環(huán)的方式分別將選出的聯(lián)系人姓名添加到al1中:</p><p> for(int i=0;i<name.size();i++){</p><p> //顯示選擇的聯(lián)系人姓名于列表ListView中</p><p> Map<String, String> map = new
108、HashMap<String, String>();</p><p> map.put(SELECTED_NAME, name.get(i));</p><p> al1.add(map);</p><p><b> }</b></p><p> 將listview與它的適配器進行關(guān)聯(lián):</p&
109、gt;<p> String[] from = { SELECTED_NAME, SEND_REPORT };</p><p> int[] to = { R.id.txt_smss_name, R.id.txt_smss_report };</p><p> mSmssAdapter=new SmssAdapter(this, al1, R.layout.smslv,
110、 from, to);</p><p> listView.setAdapter(mSmssAdapter);</p><p><b> break;</b></p><p> 這樣就把所選的內(nèi)容逐條顯示在listview中了。主界面效果及選擇聯(lián)系人后的效果如圖4.3所示:</p><p> 圖4.3短信群發(fā)主界
111、面。左圖為未選擇聯(lián)系人界面,右圖為選擇聯(lián)系人返回后的界面</p><p><b> ·選擇聯(lián)系人</b></p><p> 當(dāng)在短信群發(fā)主頁面點擊“選擇聯(lián)系人”按鈕時,就會進入選擇聯(lián)系人的界面,啟動此頁面繼承的Activity——SmssContact,此Activity在SmssContact.java中實現(xiàn)。</p><p>
112、 首先實現(xiàn)進入選擇聯(lián)系人頁面,在androidSDK中要使一個Activity啟動另一個Activity的就是利用intent方法,格式如下:</p><p> Intent intent=new Intent();</p><p> intent.setClass(父類Activity,子類Activity);</p><p> startActivity
113、ForResult(intent,0); </p><p> 在Smss(聯(lián)系人主界面)的activity中,用如下方法將活動拋給SmssContact類,此方法寫在“選擇聯(lián)系人”的點擊事件中。當(dāng)點擊“選擇聯(lián)系人”后,系統(tǒng)就會讀取聯(lián)系人數(shù)據(jù),然后將聯(lián)系人顯示與listview中,在這個過程中,系統(tǒng)會出現(xiàn)“假死”狀態(tài),所以,應(yīng)在這期間設(shè)置一個dialog窗口,用來提示用戶正在讀取數(shù)據(jù),而不是死機現(xiàn)象,這樣更體現(xiàn)出
114、人性化的設(shè)計思想理念。</p><p> 首先定義dialog的標(biāo)題和內(nèi)容:</p><p> final CharSequence strDialogTitle=getString(R.string.dialog_smss_readcontacttitle);</p><p> final CharSequence strDialogBody=getStri
115、ng(R.string.dialog_smss_readcontactbody);</p><p> 然后顯示dialog:</p><p> //顯示Dialog</p><p> sendmsg_Dialog=ProgressDialog.show(</p><p> Smss.this,</p><p>
116、 strDialogTitle,</p><p> strDialogBody,</p><p><b> true</b></p><p><b> );</b></p><p> 在顯示dialog后,啟動一個線程來調(diào)用選擇聯(lián)系人的Activity,當(dāng)完成對選擇聯(lián)系人窗口的啟動后,di
117、alog銷毀,代碼如下:</p><p><b> ……</b></p><p> new Thread(new Runnable(){</p><p> public void run() {</p><p> //new一個Intent對象,并制定class</p><p> Int
118、ent intent=new Intent();intent.setClass(Smss.this,SmssContact.class);</p><p> startActivityForResult(intent,0);//此函數(shù)可以返回被叫activity傳來的數(shù)據(jù)</p><p> sendmsg_Dialog.dismiss();</p><p>&
119、lt;b> }</b></p><p> }).start();</p><p><b> ……</b></p><p> 圖4.4讀取聯(lián)系人時的dialog</p><p> 完成上面的步驟就進入“選擇聯(lián)系人”頁面,利用游標(biāo)cursor讀取手機里的聯(lián)系人,方法如下:</p>&
120、lt;p> //取得電話本中開始一項的光標(biāo) </p><p> Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); </p><p> while (cursor.moveToNext())</p><p><b&g
121、t; {</b></p><p> Map<String, String> map = new HashMap<String, String>();</p><p> // 取得聯(lián)系人名字 </p><p> int nameFieldColumnIndex = cursor.getColumnIndex(PhoneL
122、ookup.DISPLAY_NAME); </p><p> String name = cursor.getString(nameFieldColumnIndex);</p><p> // 取得聯(lián)系人ID </p><p> String contactId = cursor.getString(cursor.getColumnIndex(Cont
123、actsContract.Contacts._ID));</p><p> 在android2系列以后,每個聯(lián)系人的電話可存放多個,所以要再定義一個游標(biāo)來循環(huán)讀取電話號碼:</p><p> Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,</p><p
124、> ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); </p><p> map.put(NAME, name);</p><p> // 取得電話號碼(可能存在多個號碼),在此處無用</p><p> whi
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- android手機防盜畢業(yè)論文
- 基于android系統(tǒng)的手機防盜畢業(yè)論文
- android手機地圖應(yīng)用開發(fā)【畢業(yè)論文】
- 基于android的手機衛(wèi)士——畢業(yè)論文
- 基于android的手機衛(wèi)士——畢業(yè)論文
- android手機地圖應(yīng)用開發(fā)【畢業(yè)論文】
- 基于android的手機遠(yuǎn)程點餐系統(tǒng)設(shè)計[畢業(yè)論文]
- android畢業(yè)論文--google android手機嵌入式系統(tǒng)的研究及開發(fā)
- android3g手機天氣預(yù)報系統(tǒng)-畢業(yè)論文
- 畢業(yè)論文--基于android操作系統(tǒng)的飛機大戰(zhàn)手機游戲
- 基于android操作系統(tǒng)的足球小將手機游戲畢業(yè)論文
- android手機防盜——總體設(shè)計【畢業(yè)論文】
- 實現(xiàn)android手機音樂應(yīng)用-畢業(yè)論文外文翻譯
- 基于android平臺的手機商城的畢業(yè)論文
- 基于android平臺的手機計步器設(shè)計【畢業(yè)論文】
- 畢業(yè)論文——android手機語音錄入軟件設(shè)計
- android畢業(yè)論文--基于android 平臺的google map的手機導(dǎo)航設(shè)計
- 基于android操作系統(tǒng)的飛機大戰(zhàn)手機游戲畢業(yè)論文(設(shè)計)
- android手機短信發(fā)送軟件設(shè)計[畢業(yè)論文]
- Android手機防盜——總體設(shè)計畢業(yè)論文.doc
評論
0/150
提交評論