




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGEIPAGEIAndroid手機來電防火墻設(shè)計分析目錄TOC\o"1-3"\h\z\t"標題四,4"第一章緒論 11.1.設(shè)計目標 11.2來電防火墻設(shè)計原則 11.3來電防火墻功能 11.4本文所做的主要工作 1第二章開發(fā)技術(shù)簡介 32.1有關(guān)Eclipse 32.1.1Eclipse簡介 32.1.2Eclipse具有的優(yōu)點 42.1.3使用XML的優(yōu)點 52.1.4Android簡介及其特點 62.2有關(guān)SQLite的介紹 72.2.1SQLite簡介 72.2.2SQLite功能特點 7第三章系統(tǒng)分析與設(shè)計 93.1系統(tǒng)功能分析 93.2創(chuàng)建數(shù)據(jù)庫文件 103.3系統(tǒng)界面設(shè)計實現(xiàn) 103.3.1可視化控件設(shè)置 103.3.2布局 113.4Eclipse環(huán)境搭建 123.4.1開發(fā)環(huán)境搭建 123.4.2創(chuàng)建模擬器 14第四章程序界面與代碼實現(xiàn) 164.1程序開發(fā)技術(shù)難點 164.1.1判斷來電號碼 164.1.2掛斷電話 174.2程序各模塊的實現(xiàn) 184.2.1用戶界面 184.2.2數(shù)據(jù)庫模塊 244.2.3主程序模塊 274.3程序測試 29結(jié)束語 31參考文獻 32PAGE1第一章緒論Android平臺于2007年11月一經(jīng)推出即獲得了手機廠商、運營商和芯片廠商的大力支持。Android是一個真正意義上的開放性移動平臺,它同時包含底層操作系統(tǒng)以及上層的用戶界面和應(yīng)用程序——移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。所有的Android程序之間是完全平等的。所有的應(yīng)用程序都運行在一個核心引擎上面,這個核心就是一個虛擬機,它提供了一系列用于應(yīng)用程序和硬件資源間通信的API。但是,包括系統(tǒng)的核心和第三方應(yīng)用都是完全平等的。因此,你可以將手機中的任何應(yīng)用程序替換成其他你所需要的其他應(yīng)用程序,這就是Android的魅力所在。1.1.設(shè)計目標本手機來電防火墻是以拒接電話為主要的設(shè)計目標,通過黑名單的新增、修改和刪除,對手機來電進行管理。如果來電號碼不在黑名單中,則按照手機默認的情景模式響應(yīng);如果來電號碼在黑名單中,則直接掛斷該電話,并且彈出一個對話框提示用戶:來電在黑名單中,已拒接。1.2來電防火墻設(shè)計原則本系統(tǒng)在設(shè)計的時候要考慮的因素主要遵循以下幾條原則:(1)目的明確。一個好的程序必須有明確合理的、適用的目的。本程序的主要目的是實現(xiàn)對號碼的屏蔽。(2)功能實用。一個軟件所提供的功能應(yīng)該是切合實際需求的。本程序?qū)崿F(xiàn)的是在黑名單中的號碼來電后,直接將其掛掉,有很好的實用價值。(3)界面簡單。軟件界面設(shè)計簡潔,美觀,人性化,滿足用戶的基本要求。1.3來電防火墻功能該來電防火墻總體上分三大模塊:用戶界面UI設(shè)計、數(shù)據(jù)庫設(shè)計和主程序模塊。用戶界面UI的設(shè)計主要有兩種方法,一種是在XML文件中靜態(tài)設(shè)置,另一種是在Java代碼中動態(tài)設(shè)置,該設(shè)計主要用的是第一種方法。該設(shè)計的數(shù)據(jù)庫采用的是SQLite,SQLite是一款輕型的嵌入式數(shù)據(jù)庫,資源占有率非常的低。程序的代碼主要是以Java為主,結(jié)合Android自己特有的類來完成整體的設(shè)計。1.4本文所做的主要工作本來電防火墻界面設(shè)計主要采用的是靜態(tài)的XML文件設(shè)置,后臺數(shù)據(jù)庫是用的SQLite,通過用戶UI與數(shù)據(jù)庫連接將前后臺連接起來,本文主要做了以下工作:第一章緒論對Android平臺進行簡單介紹,描述了Android的發(fā)展、前景和優(yōu)勢,總體對Android的認識。第二章主要介紹在本次程序開發(fā)中所使用的兩種技術(shù)—XML、SQLite本為今后的程序設(shè)計工作做好鋪墊。第三章對數(shù)據(jù)庫和程序的設(shè)計進行了介紹。第四章對程序的各個模塊進行詳細介紹,并且對設(shè)計的調(diào)試和測試以及設(shè)計過程中出現(xiàn)的問題進行了介紹。結(jié)束語是對這一段時間的設(shè)計進行總結(jié),總結(jié)一下自己的經(jīng)驗和教訓(xùn)。第二章開發(fā)技術(shù)簡介本程序設(shè)計主要采用的是用Eclipse,后臺數(shù)據(jù)庫是用的SQLite,通過兩者連接將前后臺連接起來,從而實現(xiàn)程序的運行。下面將詳細介紹兩種開發(fā)技術(shù)。2.1有關(guān)Eclipse2.1.1Eclipse簡介 Eclipse[1]是一個很讓人著迷的開發(fā)環(huán)境,它提供的核心框架和可擴展的插件機制給廣大的程序員提供了無限的想象和創(chuàng)造空間。目前網(wǎng)上流傳相當豐富且全面的開發(fā)工具方面的插件,但是Eclipse已經(jīng)超越了開發(fā)環(huán)境的概念,可以想象Eclipse將成為未來的集成的桌面環(huán)境。目前的Eclipse本身就具備資源管理和外部程序的功能,加上無所不能的插件,將構(gòu)成一個豐富多彩的工作環(huán)境而不僅僅是一個IDE。對于程序員來說,沒有什么比可以隨心所欲的定制的工作環(huán)境更重要,你的決心,勇氣和創(chuàng)造力在與別人分享成果的過程中一覽無余。Eclipse平臺是一個具有一組強大服務(wù)的框架,這些服務(wù)支持插件,比如Java開發(fā)環(huán)境插件(JDT)、插件開發(fā)環(huán)境(PDE)和其他的第三方插件(Newtool)。它由幾個主要的部分構(gòu)成:平臺運行庫、工作區(qū)、工作臺、團隊支持和幫助。平臺運行庫是內(nèi)核,它在啟動時檢查已安裝了哪些插件,并創(chuàng)建關(guān)于它們的注冊表信息。為降低啟動時間和資源使用,它在實際需要任何插件時才加載該插件。除了內(nèi)核外,其他每樣?xùn)|西都是作為插件來實現(xiàn)的。工作區(qū)是負責管理用戶資源的插件。這包括用戶創(chuàng)建的項目、那些項目中的文件,以及文件變更和其他資源。工作區(qū)還負責通知其他插件關(guān)于資源變更的信息,比如文件創(chuàng)建、刪除或更改。工作臺為Eclipse提供用戶界面。它是使用標準窗口工具包(SWT)和一個更高級的API(JFace)來構(gòu)建的;SWT是Java的Swing/AWTGUIAPI的非標準替代者,JFace則建立在SWT基礎(chǔ)上,提供用戶界面組件。SWT已被證明是Eclipse最具爭議的部分。SWT比Swing或SWT更緊密地映射到底層操作系統(tǒng)的本機圖形功能,這不僅使得SWT更快速,而且使得Java程序具有更像本機應(yīng)用程序的外觀和感覺。使用這個新的GUIAPI可能會限制Eclipse工作臺的可移植性,不過針對大多數(shù)流行操作系統(tǒng)的SWT移植版本已經(jīng)可用。Eclipse對SWT的使用只會影響Eclipse自身的可移植性——使用Eclipse構(gòu)建的任何Java應(yīng)用程序都不會受到影響,除非它們使用SWT而不是使用Swing/AWT。團隊支持組件負責提供版本控制和配置管理支持。它根據(jù)需要添加視圖,以允許用戶與所使用的任何版本控制系統(tǒng)(如果有的話)交互。大多數(shù)插件都不需要與團隊支持組件交互,除非它們提供版本控制服務(wù)。幫助組件具有與Eclipse平臺本身相當?shù)目蓴U展能力。與插件向Eclipse添加功能相同,幫助提供一個附加的導(dǎo)航結(jié)構(gòu),允許工具以HTML文件的形式添加文檔。2.1.2Eclipse具有的優(yōu)點1.Eclipse是開放源代碼的軟件。這意味著Eclipse不僅可以免費使用,還可以通過研究源代碼學(xué)習(xí)世界上頂尖開發(fā)人員的編程技術(shù),并可以共享遍布全球的開發(fā)人員所貢獻的公共開放源代碼庫。2.Eclipse是真正可擴展并可配置的。Eclipse采用插件機制,猶如一個花瓶,你可以隨時向花瓶里面插花,也可以很容易將不再需要的花取出。目前,互聯(lián)網(wǎng)上免費的、收費的插件遍地開花,插件開發(fā)工作在國內(nèi)外也如火如荼。3.Eclipse支持眾多的開發(fā)語言而不僅僅是Java。Eclipse只是給開發(fā)人員提供了一個能夠擴展系統(tǒng)功能的最小核心,基于擴展點的插件體系結(jié)構(gòu)使得Eclipse支持多種語言成為可能。只要安裝相應(yīng)語言的插件,Eclipse就可以支持該種語言的開發(fā)。目前,Eclipse已經(jīng)可以支持C、COBOL、PHP、Perl、Python等多種語言。4.Eclipse提供了對多重平臺特性的支持。開發(fā)者可以使用他們感覺最舒適、最熟悉的平臺,例如Windows、Linux、MacOS等。Eclipse對每個平臺都有其單獨的圖形工具包,這使得應(yīng)用程序具有接近本地操作系統(tǒng)的外觀和更好的性能。5.基于業(yè)界領(lǐng)先的OSGi規(guī)范。OSGi規(guī)范最早由SunMicrosystems、IBM、愛立信等于1999年推出,其服務(wù)平臺包括:服務(wù)網(wǎng)關(guān)、汽車、移動電話、工業(yè)自動化、建筑物自動化、PDA網(wǎng)格計算、娛樂(如iPronto)和IDE等。基于OSGi的系統(tǒng)以微內(nèi)核形式運行,因而能夠輕松實現(xiàn)軟件業(yè)界夢寐以求的可熱插拔、動態(tài)改變行為、穩(wěn)定高效的系統(tǒng)。Eclipse從3.1開始,毅然拋棄了其原有的已經(jīng)獲得業(yè)界認可的框架,采用OSGi作為其架構(gòu)。從Eclipse3.2版本開始,Eclipse提供了基于OSGi開發(fā)的支持,開發(fā)者可以利用其開發(fā)基于OSGi的系統(tǒng)了。6.Eclipse美輪美奐的人機界面受到廣泛贊譽。Eclipse提供了全新的SWT/JFaceAPI(而不是AWT/Swing),一改SWT/Swing單調(diào)、沉悶的界面風(fēng)格,使得開發(fā)基于本地的具有豐富圖形界面的應(yīng)用程序成為可能,猶如一股春風(fēng)吹進Java的桌面開發(fā)領(lǐng)域,給人耳目一新的感覺。7.Eclipse由業(yè)界領(lǐng)先者推出,具有強大的行業(yè)力量。Eclipse基金會吸收了大量學(xué)術(shù)研究機構(gòu)、商業(yè)組織,領(lǐng)導(dǎo)Eclipse的長遠規(guī)劃和發(fā)展,并確保Eclipse處于軟件工具行業(yè)的領(lǐng)先地位。2.1.3使用XML的優(yōu)點XML[1](ExtensibleMarkupLanguage)即可擴展標記語言,它與HTML一樣,都是SGML(StandardGeneralizedMarkupLanguage,標準通用標記語言)。Xml是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術(shù),是當前處理結(jié)構(gòu)化文檔信息的有力工具。擴展標記語言XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數(shù)據(jù)要占用的空間更多,但XML極其簡單易于掌握和使用。XML標準已經(jīng)國際化,它支持世界上大多數(shù)的文字。這源于它的統(tǒng)一代碼的新編碼標準,這種編碼標準支持世界上所有以編程語言(如C/C++/BasicNisualBasic/JavaScript/Perl)編寫的混合文本。凡能閱讀XML語言的軟件都能順利處理這些不同語言字符的任意組合。因此,XML不僅能在不同的計算機系統(tǒng)之間交換信息,而且能跨越國界和不同文化疆界交換信息。XML可用于不同類型、系統(tǒng)間的交換格式的傳送,從而簡化了從一個應(yīng)用程序到另一個應(yīng)用程序之間傳遞信息的工作。XML的特性給應(yīng)用軟件賦予了強大的功能和靈活性,也給開發(fā)者和用戶帶來諸多好處,如下所示:1.數(shù)據(jù)可以被XML惟一標識,因此可以實現(xiàn)更有意義的網(wǎng)絡(luò)搜索。2.數(shù)據(jù)一旦建立,可將XML,文件發(fā)送到其他應(yīng)用軟件、對象或中間層服務(wù)器中做進一步處理或發(fā)到客戶端瀏覽器中直接瀏覽。3.描述數(shù)據(jù)結(jié)構(gòu)的標記可以被重復(fù)使用,XML能使異構(gòu)數(shù)據(jù)庫中的數(shù)據(jù)比較容易集成。4.XML具有擴展性和靈活性的特點,能描述各種應(yīng)用軟件中的數(shù)據(jù)。5.為實現(xiàn)本地計算和處理,提供了更為便捷的手段。6.可以根據(jù)客戶配置、使用者選擇和其他標準,將本地XML數(shù)據(jù)動態(tài)地表現(xiàn)出來。7.通過XML,可以實現(xiàn)粒狀數(shù)據(jù)的更新。8.XML的開放是基于文本的格式的,可以用HTTP進行傳送,無需對現(xiàn)有網(wǎng)絡(luò)進行變更。9.XML實現(xiàn)了內(nèi)容與顯示完全分開,可以更加靈活地進行編程,減少了服務(wù)器的工作量。10.增強了服務(wù)器的升級性能。由于XML是在HTML之后才發(fā)展起來的,所以許多人就將XML認為是HTML的替代品。事實上,這兩種語言對數(shù)據(jù)的處理是不同的。例如,XML用來在Web上結(jié)構(gòu)化和描述數(shù)據(jù);HTML則更適合用來格式化數(shù)據(jù)。因為大部分HTML網(wǎng)頁不但儲存數(shù)據(jù),也同時將數(shù)據(jù)格式化,任何對HTML的置換都將在數(shù)據(jù)儲存區(qū)內(nèi)發(fā)生。在許多情況下,XML可以接管資料儲存的工作(還有資料描述的工作),如此一來,HTML只被用來作數(shù)據(jù)的格式化與腳本。而且可以將HTML格式轉(zhuǎn)化為XML格式。2.1.4Android簡介及其特點Android[2]是Google于07年11月5日宣布的基于Linux平臺開源手機操作系統(tǒng)名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。Android是Google開發(fā)的基于Linux平臺的開源手機操作系統(tǒng)。它包括操作系統(tǒng)、用戶界面和應(yīng)用程序——移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。谷歌與開放手機聯(lián)盟合作開發(fā)了Android,這個聯(lián)盟由包括中國移動、摩托羅拉、高通、宏達和T-Mobile在內(nèi)的30多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。通過與運營商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標準化、開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個開放式的生態(tài)系統(tǒng)。我們認為此舉必將推進更好、更快的創(chuàng)新,為移動用戶提供不可預(yù)知的應(yīng)用和服務(wù)。開放性在優(yōu)勢方面,Android平臺首先就是其開發(fā)性,開發(fā)的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個嶄新的平臺也將很快走向成熟。開發(fā)性對于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,最大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。掙脫運營商的束縛在過去很長的一段時間,特別是在歐美地區(qū),手機應(yīng)用往往受到運營商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運營商的控制。從去年iPhone上市,用戶可以更加方便地連接網(wǎng)絡(luò),運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網(wǎng)絡(luò)的逐步過渡和提升,手機隨意接入網(wǎng)絡(luò)已不是運營商口中的笑談,你可以通過手機IM軟件方便地進行即時聊天時?;ヂ?lián)網(wǎng)巨頭Google推動的Android終端天生就有網(wǎng)絡(luò)特色,將讓用戶離互聯(lián)網(wǎng)更近。豐富的硬件選擇這一點還是與Android平臺的開放性相關(guān),由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞Symbian風(fēng)格手機一下改用蘋果iPhone,同時還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。不受任何限制的開發(fā)商Android平臺提供給第三方開發(fā)商一個十分寬泛、自由的環(huán)境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android難題之一。無縫結(jié)合的Google應(yīng)用如今叱咤互聯(lián)網(wǎng)的Google已經(jīng)走過10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺手機將無縫結(jié)合這些優(yōu)秀的Google服務(wù)。2.2有關(guān)SQLite的介紹2.2.1SQLite簡介SQLite[3]第一個Alpha版本誕生于2000年5月。至今已經(jīng)有10個年頭了。SQLite也迎來了一個版本SQLite3已經(jīng)發(fā)布。SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。2.2.2SQLite功能特點SQLite是一種小型的嵌入式,其主要功能特點如下:(1)ACID事務(wù)。(2)零配置一無需安裝和管理配置。(3)儲存在單一磁盤文件中的一個完整的數(shù)據(jù)庫。(4)數(shù)據(jù)庫文件可以在不同字節(jié)順序的機器間自由的共享。(5)支持數(shù)據(jù)庫大小至2TB。(6)足夠小,大致3萬行C代碼,250K。(7)比一些流行的數(shù)據(jù)庫在大部分普通數(shù)據(jù)庫操作要快。(8)簡單,輕松的API。(9)包含TCL綁定,同時通過Wrapper支持其他語言的綁定。(10)良好注釋的源代碼,并且有著90%以上的測試覆蓋率。(11)獨立:沒有額外依賴。(12)Source完全的Open,你可以用于任何用途,包括出售它。(13)支持多種開發(fā)語言,C,PHP,Perl,Java,ASP.NET,Python。第三章系統(tǒng)分析與設(shè)計本來電防火墻在Eclipse下編譯完成,并使用XML腳本語言結(jié)合Java代碼編寫整體程序,前臺界面設(shè)計采用的是XML靜態(tài)文件,并且在代碼中有相應(yīng)的動態(tài)設(shè)置,后臺數(shù)據(jù)庫采用了SQLite,并通過一系列的設(shè)計使來電防火墻逐步趨于完善。3.1系統(tǒng)功能分析本來電防火墻主要包括三個模塊:用戶界面UI、數(shù)據(jù)庫模塊和主程序模塊。本手機來電防火墻主要是作為拒接電話設(shè)計的。通過黑名單的新增、修改和刪除,來對手機來電進行管理。如果來電號碼不在黑名單中,則按照手機默認的情景模式響應(yīng);如果來電號碼在黑名單中,則直接掛斷該電話,并且彈出一個對話框提示用戶:來電在黑名單中,已拒接。本手機來電防火墻的三個模塊如下圖3-1所示:來電防火墻主程序來電防火墻主程序數(shù)據(jù)庫用戶界面UI來電掛斷判斷函數(shù)退出界面黑名單界面動態(tài)主界面本手機來電防火墻開發(fā)的時候,我首先繪制的是所有用戶界面UI的整體框架圖,如3-2所示:黑名單黑名單新增幫助文本黑名單幫助退出修改刪除確定退出?確定取消圖3-2整體框架圖3.2創(chuàng)建數(shù)據(jù)庫文件本程序中,后臺數(shù)據(jù)庫用的SQLite數(shù)據(jù)庫,只用到了黑名單這一個表格。黑名單主要是用來保存拒接號碼的。包括編號、號碼簡介兩個字段。其中_id(編號)設(shè)定為主鍵,number(號碼)是必要字段,編碼是自動獲取,從1開始以整數(shù)上升。黑名單表結(jié)構(gòu)如表3-1所示:表3-1用戶注冊表字段數(shù)據(jù)類型長度允許空_id整型1否number整型4否3.3系統(tǒng)界面設(shè)計實現(xiàn)本程序的用戶界面設(shè)計采用的是XML文件,涉及到主界面,黑名單界面等實現(xiàn)。3.3.1可視化控件設(shè)置可視化控件[4]是直接與用戶交互的對象。Android除了支持自定義控件以外,自身也提供了非常豐富的各種可視化控件。這些控件大都已經(jīng)完整地實現(xiàn)其功能,所以一般情況下開發(fā)人員只需要設(shè)置它們的屬性,就可以定義一個可交互的用戶界面控件了。設(shè)置控件屬性的方法有兩種:一種是在XML文件中靜態(tài)設(shè)置,另一種則是在Java代碼中動態(tài)設(shè)置。要創(chuàng)建用戶界面,首先我們必須了解的是View類。View類是可視化控件的基類,它主要提供了控件繪制和事件處理的方法。而可視化控件,是指重新實現(xiàn)了View的繪制和事件處理方法并且最終與用戶交互對象,如文本顯示、按鈕等。ViewGroup類也是繼承自View類,其最大的特點是可以有子控件。子控件是View類的對象,當然也可以是ViewGroup類的對象,即ViewGroup可以嵌套。實際上,這是采用了設(shè)計模式中的Composite模式,系統(tǒng)把對象以樹形結(jié)構(gòu)組織起來,從而達到了“部分——整體”的層次結(jié)構(gòu),使得客戶端對單個對象和組合對象的使用具有一致性。 在Android中除了想Listview這種需要有子控件的控件類繼承自ViewGroup以外,還有Layout類也同樣繼承自ViewGroup。需要說明的是,布局默認情況下并不直接顯示給用戶,其主要功能在于控制子控件在屏幕上擺放的位置。所以通??梢姷腁ndroid程序都是可視化控件和布局組成的。3.3.2布局當我們手握著一些已經(jīng)被設(shè)置好了的控件的時候,就該思考怎樣按照你的設(shè)計把他們放在Android設(shè)備的屏幕上了。Layout就是負責管理控件在屏幕的位置的類。AndroidSDK已經(jīng)內(nèi)置了幾種簡單的布局[2]模型,通過這幾種布局模型的組合、嵌套并設(shè)置子控件的布局參數(shù),我們完全可以構(gòu)建出各種復(fù)雜的用戶界面。1.線性布局[6]線性布局應(yīng)該是應(yīng)用程序中最常用的布局方式,他提供了控件水平或者垂直排列的模型,同時我們可通過設(shè)置子控件的weight布局參數(shù)控制各個控件在布局中的相對大小。2.表格布局表格布局模型以行列的形式管理子控件,每一行為一個TableRow的對象,也可為一個View的對象。TableRow可添加子控件,每添加一個子控件為一列。3.相對布局相對布局的子控件會根據(jù)它們所設(shè)置的參照控件和參數(shù)進行相對布局。參照控件可以是父控件,也可以是其他子控件,但被參照的控件必須要在參照它的控件之前定義。4.單幀布局單幀布局最簡單的布局模型,在這種布局下每個添加的子控件都被放在布局的左上角,并覆蓋在前一個控件的上層。5.坐標布局坐標布局的子控件需要制定相對于此坐標布局的橫、縱坐標值,否則將會像FrameLayout那樣被排在左上角。手機應(yīng)用需要適用于不同的屏幕大小,而這樣布局模型不能自適應(yīng)屏幕尺寸大小,所以應(yīng)用的相當少。3.4Eclipse環(huán)境搭建數(shù)據(jù)庫的連接方式主要有兩種:ODBC連接和OLEDB連接。3.4.1開發(fā)環(huán)境搭建1.開始Eclipse[3],然后選擇Help>SoftwareUpdates>FindandInstall,如圖3-3圖3-3FindandInstall2.對話框出現(xiàn)后,選擇Searchfornewfeaturestoinstall點擊Next。如圖3-4圖3-4Searchfornewfeaturestoinstall3.點擊NewRemoteSite。如圖3-5圖3-5NewRemoteSite4.在對話框中,輸入遠程站點的名字,輸入站點如下:/android/eclispse/點擊Ok 5.你可以看到新的站點添加到搜索列表中(并檢查),點擊Finish。6.在下面的搜索結(jié)果對話框,選擇復(fù)選框AndroidPlugin>DeveloperTools。它將會檢查特性:"AndroidDeveloperTools"和"AndroidEditors"。Android編輯器的特性是可選的,但我們推薦安裝它,如果你選擇安裝,需要前面提到的WST插件,點擊Next。如圖3-6:圖3-6搜索結(jié)果對話框7.閱讀許可協(xié)議,然后選擇接受許可協(xié)議,點擊Next。8.點擊Finish。9.ADT插件沒有簽名,你可以點擊“InstallAll“來安裝所有東西。10.重啟Eclipse。3.4.2創(chuàng)建模擬器 1.打開Eclipse—windows—AndroidSDKandAVDManager[4]。如圖3-7:圖3-7創(chuàng)建模擬器從“AndroidSDKandAVDManager”窗口的左側(cè)選擇“VirtualDevices”。1)選擇“New”。2)輸入一個AVD名稱。3)選擇一個Target。4)輸入模擬的SDCard的容量大小。5)選擇一個外觀皮膚Skin。1.讓模擬器外觀大小像G1,MyTouch3G,Hero,等手機設(shè)備。保留默認的skin設(shè)置值。2.模擬MotorolaDroid。選擇WVGA854。3.模擬其他的設(shè)備。選擇列表內(nèi)其他的選項。6)然后“CreateAVD”。第四章程序界面與代碼實現(xiàn)本程序主要包括三個模塊,即用戶界面模塊、數(shù)據(jù)庫登錄模塊和主程序模塊。下面將介紹程序的主要開發(fā)難點、主界面和關(guān)鍵代碼。4.1程序開發(fā)技術(shù)難點本程序在開發(fā)的過程中,遇到了不少的難點。其中主要的兩個難點,一個是來電后判斷來電號碼是否在黑名單中,另一個是如果該號碼存在于黑名單中,如何掛斷電話的問題。4.1.1判斷來電號碼 對于這個難點,我開始思考的解決辦法是把數(shù)據(jù)庫的每一行讀出來之后與來電號碼進行比較,可是這個方法在實現(xiàn)的時候比較麻煩,問題出在循環(huán)語句上,最終沒有成功。我又想了另一個方法,可以先將黑名單中的數(shù)據(jù)從數(shù)據(jù)庫中讀到一個字符串數(shù)組當中,然后再將來電號碼與這個字符串數(shù)組的每一個字符串(也就是每一個電話號碼)進行比較,這樣實現(xiàn)起來就比較的簡單了。 在來電號碼與字符串數(shù)組比較的時候,我寫了一個判斷函數(shù),該函數(shù)在程序中多次用到,比如在新增號碼的時候判斷號碼是否已存在于黑名單中。 (1)將數(shù)據(jù)庫中的號碼讀到數(shù)組中的代碼實現(xiàn)如下:blackToDoDBresolver=newblackToDoDB(this);Cursorcur=resolver.select();intccount=cur.getCount();pnumber=newString[ccount];for(inti=0;i<ccount;i++){cur.moveToPosition(i);pnumber[i]=cur.getString(1);} (2)判斷函數(shù)[7]:privatebooleanjudge(Stringnumber,String[]snumber){ inti=0; booleanflag=false; while(i<snumber.length){ if(number.equals(snumber[i])){ flag=true; } i++; } returnflag;}4.1.2掛斷電話 在Android較早的SDK版本里,有一個Phone類,不過,在1.0之后被刪除了,被設(shè)置為私有了,只能系統(tǒng)調(diào)用,也就是不能直接引用Phone類掛斷電話的方法了,所以掛斷電話成為了程序開發(fā)過程中的一個難點。 于是,我查閱了相關(guān)的資料,找到了一個解決的辦法,那就是利用Java的反射機制。 Java反射機制[8]介紹: (1)Java反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。(2)Java反射機制主要提供了以下功能:在運行時判斷任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理。于是我通過Java的反射機制,來調(diào)用被private的endcall方法,實現(xiàn)代碼如下所示:TelephonyManagertManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//初始化iTelephony,得到該對象的classClass<TelephonyManager>c=TelephonyManager.class;MethodgetITelephonyMethod=null;try{getITelephonyMethod=c.getDeclaredMethod("getITelephony",(Class[])null);getITelephonyMethod.setAccessible(true);}catch(SecurityExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}//調(diào)用itelephone類的endcalltry{ ITelephonyiTelephony=(ITelephony)getITelephonyMethod.invoke(tManager,(Object[])null); try{ iTelephony.endCall(); }4.2程序各模塊的實現(xiàn)4.2.1用戶界面(1)該模塊主要是各個用戶界面的,這些界面都又相應(yīng)的XML文件生成。程序主界面如4-1所示:圖4-1主程序界面該界面通過mian.xml文件來靜態(tài)的實現(xiàn),mian.xml代碼如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"> <Button android:id="@+id/button1_id"android:layout_width="280dip"android:layout_height="wrap_content"android:text="@string/button1" android:gravity="center"/><Button android:id="@+id/button3_id"android:layout_width="280dip"android:layout_height="wrap_content"android:text="@string/button3"android:gravity="center"/><Button android:id="@+id/button4_id"android:layout_width="280dip"android:layout_height="wrap_content"android:text="@string/button4"android:gravity="center"/></LinearLayout>(2)點擊黑名單后,會打開黑名單界面黑名單界面如圖4-2所示:圖4-2黑名單界面該界面主要相關(guān)java代碼如下:publicclassblacklistextendsActivity{privateblackToDoDBmyToDoDB;privateCursormyCursor;privateListViewmyListView;privateEditTextmyEditText;privateint_id;String[]pnumber;protectedfinalstaticintMENU_ADD=Menu.FIRST;protectedfinalstaticintMENU_EDIT=Menu.FIRST+1;protectedfinalstaticintMENU_DELETE=Menu.FIRST+2;@Override}myListView=(ListView)this.findViewById(R.id.myListView);myEditText=(EditText)this.findViewById(R.id.myEditText);myToDoDB=newblackToDoDB(this);/*取得DataBase里的數(shù)據(jù)*/myCursor=myToDoDB.select();intccount=myCursor.getCount();pnumber=newString[ccount];for(inti=0;i<ccount;i++){ myCursor.moveToPosition(i); pnumber[i]=myCursor.getString(1);}/*newSimpleCursorAdapter并將myCursor傳入,顯示數(shù)據(jù)的字段為todo_text*/SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.list,myCursor,newString[]{blackToDoDB.FIELD_TEXT},newint[]{R.id.listTextView1});myListView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener(){@OverridepublicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){/*getSelectedItem所取得的是SQLiteCursor*/SQLiteCursorsc=(SQLiteCursor)arg0.getSelectedItem();_id=sc.getInt(0);myEditText.setText(sc.getString(1));}@OverridepublicvoidonNothingSelected(AdapterView<?>arg0){}});}privatevoidaddTodo(){ if(myEditText.getText().toString().equals(""))return; if(judge(myEditText.getText().toString(),pnumber)) Toast.makeText(getApplicationContext(),"該號碼已經(jīng)存在!",Toast.LENGTH_SHORT).show();/*添加數(shù)據(jù)到數(shù)據(jù)庫*/else{myToDoDB.insert(myEditText.getText().toString());/*重新查詢*/myCursor.requery();/*重新整理myListView*/myListView.invalidateViews();myEditText.setText("");_id=0;}}privatevoiddeleteTodo(){if(_id==0)return;newAlertDialog.Builder(blacklist.this)/*彈出窗口的最上頭文字*/.setTitle(R.string.deltiltei)/*設(shè)置彈出窗口的圖式*///.setIcon(R.drawable.hot)/*設(shè)置彈出窗口的信息*/.setMessage(R.string.del_msg).setPositiveButton(R.string.close_ok,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialoginterface,inti){/*刪除數(shù)據(jù)*/ myToDoDB.delete(_id); myCursor.requery(); myListView.invalidateViews(); myEditText.setText(""); _id=0;}}).setNegativeButton(R.string.close_no,newDialogInterface.OnClickListener(){/*設(shè)置跳出窗口的返回事件*/publicvoidonClick(DialogInterfacedialoginterface,inti){}}).show();}}(3)幫助界面如4-3所示:圖4-3幫助界面該界面是通過代碼動態(tài)實現(xiàn)的,相關(guān)代碼如下:button3.setOnClickListener(newButton.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubnewAlertDialog.Builder(Firewall.this)/*彈出窗口的最上頭文字*/.setTitle(R.string.help_name)/*設(shè)置彈出窗口的圖式*///.setIcon(R.drawable.hot)/*設(shè)置彈出窗口的信息*/.setMessage(R.string.help_msg).setPositiveButton(R.string.close_ok,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialoginterface,inti){//finish();/*關(guān)閉窗口*/}}).show();}});(4)點擊退出,彈出退出界面,如圖4-4所示:圖4-4退出界面4.2.2數(shù)據(jù)庫模塊該模塊主要是對數(shù)據(jù)庫進行管理的。黑名單連到SQLite[6]數(shù)據(jù)庫后,可以對黑名單進行新增、修改和刪除。界面如4-5所示:圖4-5數(shù)據(jù)庫修改界面數(shù)據(jù)庫新增、修改和刪除的代碼如下:publicvoidonCreate(SQLiteDatabasedb){/*建table*/Stringsql="CREATETABLE"+TABLE_NAME+"("+FIELD_id+"INTEGERprimarykeyautoincrement,"+""+FIELD_TEXT+"text)";db.execSQL(sql);}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;db.execSQL(sql);onCreate(db);}publicCursorselect(){SQLiteDatabasedb=this.getReadableDatabase();Cursorcursor=db.query(TABLE_NAME,null,null,null,null,null,null);returncursor;}publiclonginsert(Stringtext){SQLiteDatabasedb=this.getWritableDatabase();/*ContentValues*/ContentValuescv=newContentValues();cv.put(FIELD_TEXT,text);longrow=db.insert(TABLE_NAME,null,cv);returnrow;}publicvoiddelete(intid){SQLiteDatabasedb=this.getWritableDatabase();Stringwhere=FIELD_id+"=?";String[]whereValue={Integer.toString(id)};db.delete(TABLE_NAME,where,whereValue);}publicvoidupdate(intid,Stringtext){SQLiteDatabasedb=this.getWritableDatabase();Stringwhere=FIELD_id+"=?";String[]whereValue={Integer.toString(id)};/*ContentValues*/ContentValuescv=newContentValues();cv.put(FIELD_TEXT,text);db.update(TABLE_NAME,cv,where,whereValue);}4.2.3主程序模塊主程序模塊包括了各個界面的切換操作,來電后把來電號碼與黑名單中的數(shù)據(jù)進行比較、判斷的代碼。來電后拒接的界面如圖4-6所示圖4-6游客瀏覽主界面來電后,手機自動判斷來電號碼是否在數(shù)據(jù)庫中,如果存在則掛斷電話。主要代碼如下:publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//Intentintent=newIntent(this,Firewall1.class);//sendBroadcast(intent);//使用數(shù)據(jù)庫blackToDoDBresolver=newblackToDoDB(this);Cursorcur=resolver.select();intccount=cur.getCount();pnumber=newString[ccount];for(inti=0;i<ccount;i++){ cur.moveToPosition(i); pnumber[i]=cur.getString(1);}mPhoneCallListenerphoneListener=newmPhoneCallListener();/*砞﹚TelephonyManagerъTelephonySeverice*/TelephonyManagertelMgr=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);/*砞﹚ListenCall*/telMgr.listen(phoneListener,mPhoneCallListener.LISTEN_CALL_STATE);finalButtonbutton1=(Button)findViewById(R.id.button1_id);finalButtonbutton3=(Button)findViewById(R.id.button3_id);finalButtonbutton4=(Button)findViewById(R.id.button4_id);button1.setOnClickListener(newButton.OnClickListener() { @Override publicvoidonClick(Viewb) { Intentintent=newIntent(); intent.setClass(Firewall.this,blacklist.class); startActivity(intent); //Firewall.this.finish(); }publicclassmPhoneCallListenerextendsPhoneStateListener{@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){//TODOAuto-generatedmethodstubswitch(state){/*取得手機是開機狀態(tài)*/caseTelephonyManager.CALL_STATE_IDLE://mTextView01.setText(R.string.str_CALL_STATE_IDLE);try{
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 母豬舒適度對生產(chǎn)性能的影響試題及答案
- 教師資格筆試課堂活動設(shè)計試題及答案
- 探索藥劑學(xué)考試的核心知識點及試題及答案
- 戶外運動試題及答案
- 稅法總論考試題及答案
- 探索母豬護理新方法考試試題及答案
- 內(nèi)科學(xué)核心知識解析試題及答案
- 母豬護理中常見問題的解決方案試題及答案
- 深入研究孕產(chǎn)婦護理的護士資格證考試試題及答案
- 母豬養(yǎng)殖成功要素分析試題及答案
- 電子商務(wù)稅收法律問題
- 水平泵房水泵聯(lián)合試運轉(zhuǎn)方案及安全技術(shù)措施
- 中國十大階層的劃分課件
- 中考數(shù)學(xué)分式與分式方程計算題(附答案)
- 了凡四訓(xùn)-徐韻發(fā)(課堂PPT)
- 中國政法大學(xué)社會主義市場經(jīng)濟概論重點歸納及復(fù)習(xí)試題(楊干忠版)
- 蹲踞式起跑 教案
- 《螞蟻和西瓜》課件
- 計量支付用表承包人
- cvc和picc導(dǎo)管的維護ppt課件
- 真我中心學(xué)-穿越選擇之屋(簡)重要感悟
評論
0/150
提交評論