Android手機(jī)來(lái)電防火墻設(shè)計(jì)設(shè)計(jì)_第1頁(yè)
Android手機(jī)來(lái)電防火墻設(shè)計(jì)設(shè)計(jì)_第2頁(yè)
Android手機(jī)來(lái)電防火墻設(shè)計(jì)設(shè)計(jì)_第3頁(yè)
Android手機(jī)來(lái)電防火墻設(shè)計(jì)設(shè)計(jì)_第4頁(yè)
Android手機(jī)來(lái)電防火墻設(shè)計(jì)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGEIPAGEIAndroid手機(jī)來(lái)電防火墻設(shè)計(jì)分析目錄TOC\o"1-3"\h\z\t"標(biāo)題四,4"第一章緒論 11.1.設(shè)計(jì)目標(biāo) 11.2來(lái)電防火墻設(shè)計(jì)原則 11.3來(lái)電防火墻功能 11.4本文所做的主要工作 1第二章開(kāi)發(fā)技術(shù)簡(jiǎn)介 32.1有關(guān)Eclipse 32.1.1Eclipse簡(jiǎn)介 32.1.2Eclipse具有的優(yōu)點(diǎn) 42.1.3使用XML的優(yōu)點(diǎn) 52.1.4Android簡(jiǎn)介及其特點(diǎn) 62.2有關(guān)SQLite的介紹 72.2.1SQLite簡(jiǎn)介 72.2.2SQLite功能特點(diǎn) 7第三章系統(tǒng)分析與設(shè)計(jì) 93.1系統(tǒng)功能分析 93.2創(chuàng)建數(shù)據(jù)庫(kù)文件 103.3系統(tǒng)界面設(shè)計(jì)實(shí)現(xiàn) 103.3.1可視化控件設(shè)置 103.3.2布局 113.4Eclipse環(huán)境搭建 123.4.1開(kāi)發(fā)環(huán)境搭建 123.4.2創(chuàng)建模擬器 14第四章程序界面與代碼實(shí)現(xiàn) 164.1程序開(kāi)發(fā)技術(shù)難點(diǎn) 164.1.1判斷來(lái)電號(hào)碼 164.1.2掛斷電話 174.2程序各模塊的實(shí)現(xiàn) 184.2.1用戶(hù)界面 184.2.2數(shù)據(jù)庫(kù)模塊 244.2.3主程序模塊 274.3程序測(cè)試 29結(jié)束語(yǔ) 31參考文獻(xiàn) 32PAGE1第一章緒論Android平臺(tái)于2007年11月一經(jīng)推出即獲得了手機(jī)廠商、運(yùn)營(yíng)商和芯片廠商的大力支持。Android是一個(gè)真正意義上的開(kāi)放性移動(dòng)平臺(tái),它同時(shí)包含底層操作系統(tǒng)以及上層的用戶(hù)界面和應(yīng)用程序——移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙。所有的Android程序之間是完全平等的。所有的應(yīng)用程序都運(yùn)行在一個(gè)核心引擎上面,這個(gè)核心就是一個(gè)虛擬機(jī),它提供了一系列用于應(yīng)用程序和硬件資源間通信的API。但是,包括系統(tǒng)的核心和第三方應(yīng)用都是完全平等的。因此,你可以將手機(jī)中的任何應(yīng)用程序替換成其他你所需要的其他應(yīng)用程序,這就是Android的魅力所在。1.1.設(shè)計(jì)目標(biāo)本手機(jī)來(lái)電防火墻是以拒接電話為主要的設(shè)計(jì)目標(biāo),通過(guò)黑名單的新增、修改和刪除,對(duì)手機(jī)來(lái)電進(jìn)行管理。如果來(lái)電號(hào)碼不在黑名單中,則按照手機(jī)默認(rèn)的情景模式響應(yīng);如果來(lái)電號(hào)碼在黑名單中,則直接掛斷該電話,并且彈出一個(gè)對(duì)話框提示用戶(hù):來(lái)電在黑名單中,已拒接。1.2來(lái)電防火墻設(shè)計(jì)原則本系統(tǒng)在設(shè)計(jì)的時(shí)候要考慮的因素主要遵循以下幾條原則:(1)目的明確。一個(gè)好的程序必須有明確合理的、適用的目的。本程序的主要目的是實(shí)現(xiàn)對(duì)號(hào)碼的屏蔽。(2)功能實(shí)用。一個(gè)軟件所提供的功能應(yīng)該是切合實(shí)際需求的。本程序?qū)崿F(xiàn)的是在黑名單中的號(hào)碼來(lái)電后,直接將其掛掉,有很好的實(shí)用價(jià)值。(3)界面簡(jiǎn)單。軟件界面設(shè)計(jì)簡(jiǎn)潔,美觀,人性化,滿足用戶(hù)的基本要求。1.3來(lái)電防火墻功能該來(lái)電防火墻總體上分三大模塊:用戶(hù)界面UI設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和主程序模塊。用戶(hù)界面UI的設(shè)計(jì)主要有兩種方法,一種是在XML文件中靜態(tài)設(shè)置,另一種是在Java代碼中動(dòng)態(tài)設(shè)置,該設(shè)計(jì)主要用的是第一種方法。該設(shè)計(jì)的數(shù)據(jù)庫(kù)采用的是SQLite,SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù),資源占有率非常的低。程序的代碼主要是以Java為主,結(jié)合Android自己特有的類(lèi)來(lái)完成整體的設(shè)計(jì)。1.4本文所做的主要工作本來(lái)電防火墻界面設(shè)計(jì)主要采用的是靜態(tài)的XML文件設(shè)置,后臺(tái)數(shù)據(jù)庫(kù)是用的SQLite,通過(guò)用戶(hù)UI與數(shù)據(jù)庫(kù)連接將前后臺(tái)連接起來(lái),本文主要做了以下工作:第一章緒論對(duì)Android平臺(tái)進(jìn)行簡(jiǎn)單介紹,描述了Android的發(fā)展、前景和優(yōu)勢(shì),總體對(duì)Android的認(rèn)識(shí)。第二章主要介紹在本次程序開(kāi)發(fā)中所使用的兩種技術(shù)—XML、SQLite本為今后的程序設(shè)計(jì)工作做好鋪墊。第三章對(duì)數(shù)據(jù)庫(kù)和程序的設(shè)計(jì)進(jìn)行了介紹。第四章對(duì)程序的各個(gè)模塊進(jìn)行詳細(xì)介紹,并且對(duì)設(shè)計(jì)的調(diào)試和測(cè)試以及設(shè)計(jì)過(guò)程中出現(xiàn)的問(wèn)題進(jìn)行了介紹。結(jié)束語(yǔ)是對(duì)這一段時(shí)間的設(shè)計(jì)進(jìn)行總結(jié),總結(jié)一下自己的經(jīng)驗(yàn)和教訓(xùn)。第二章開(kāi)發(fā)技術(shù)簡(jiǎn)介本程序設(shè)計(jì)主要采用的是用Eclipse,后臺(tái)數(shù)據(jù)庫(kù)是用的SQLite,通過(guò)兩者連接將前后臺(tái)連接起來(lái),從而實(shí)現(xiàn)程序的運(yùn)行。下面將詳細(xì)介紹兩種開(kāi)發(fā)技術(shù)。2.1有關(guān)Eclipse2.1.1Eclipse簡(jiǎn)介 Eclipse[1]是一個(gè)很讓人著迷的開(kāi)發(fā)環(huán)境,它提供的核心框架和可擴(kuò)展的插件機(jī)制給廣大的程序員提供了無(wú)限的想象和創(chuàng)造空間。目前網(wǎng)上流傳相當(dāng)豐富且全面的開(kāi)發(fā)工具方面的插件,但是Eclipse已經(jīng)超越了開(kāi)發(fā)環(huán)境的概念,可以想象Eclipse將成為未來(lái)的集成的桌面環(huán)境。目前的Eclipse本身就具備資源管理和外部程序的功能,加上無(wú)所不能的插件,將構(gòu)成一個(gè)豐富多彩的工作環(huán)境而不僅僅是一個(gè)IDE。對(duì)于程序員來(lái)說(shuō),沒(méi)有什么比可以隨心所欲的定制的工作環(huán)境更重要,你的決心,勇氣和創(chuàng)造力在與別人分享成果的過(guò)程中一覽無(wú)余。Eclipse平臺(tái)是一個(gè)具有一組強(qiáng)大服務(wù)的框架,這些服務(wù)支持插件,比如Java開(kāi)發(fā)環(huán)境插件(JDT)、插件開(kāi)發(fā)環(huán)境(PDE)和其他的第三方插件(Newtool)。它由幾個(gè)主要的部分構(gòu)成:平臺(tái)運(yùn)行庫(kù)、工作區(qū)、工作臺(tái)、團(tuán)隊(duì)支持和幫助。平臺(tái)運(yùn)行庫(kù)是內(nèi)核,它在啟動(dòng)時(shí)檢查已安裝了哪些插件,并創(chuàng)建關(guān)于它們的注冊(cè)表信息。為降低啟動(dòng)時(shí)間和資源使用,它在實(shí)際需要任何插件時(shí)才加載該插件。除了內(nèi)核外,其他每樣?xùn)|西都是作為插件來(lái)實(shí)現(xiàn)的。工作區(qū)是負(fù)責(zé)管理用戶(hù)資源的插件。這包括用戶(hù)創(chuàng)建的項(xiàng)目、那些項(xiàng)目中的文件,以及文件變更和其他資源。工作區(qū)還負(fù)責(zé)通知其他插件關(guān)于資源變更的信息,比如文件創(chuàng)建、刪除或更改。工作臺(tái)為Eclipse提供用戶(hù)界面。它是使用標(biāo)準(zhǔn)窗口工具包(SWT)和一個(gè)更高級(jí)的API(JFace)來(lái)構(gòu)建的;SWT是Java的Swing/AWTGUIAPI的非標(biāo)準(zhǔn)替代者,JFace則建立在SWT基礎(chǔ)上,提供用戶(hù)界面組件。SWT已被證明是Eclipse最具爭(zhēng)議的部分。SWT比Swing或SWT更緊密地映射到底層操作系統(tǒng)的本機(jī)圖形功能,這不僅使得SWT更快速,而且使得Java程序具有更像本機(jī)應(yīng)用程序的外觀和感覺(jué)。使用這個(gè)新的GUIAPI可能會(huì)限制Eclipse工作臺(tái)的可移植性,不過(guò)針對(duì)大多數(shù)流行操作系統(tǒng)的SWT移植版本已經(jīng)可用。Eclipse對(duì)SWT的使用只會(huì)影響Eclipse自身的可移植性——使用Eclipse構(gòu)建的任何Java應(yīng)用程序都不會(huì)受到影響,除非它們使用SWT而不是使用Swing/AWT。團(tuán)隊(duì)支持組件負(fù)責(zé)提供版本控制和配置管理支持。它根據(jù)需要添加視圖,以允許用戶(hù)與所使用的任何版本控制系統(tǒng)(如果有的話)交互。大多數(shù)插件都不需要與團(tuán)隊(duì)支持組件交互,除非它們提供版本控制服務(wù)。幫助組件具有與Eclipse平臺(tái)本身相當(dāng)?shù)目蓴U(kuò)展能力。與插件向Eclipse添加功能相同,幫助提供一個(gè)附加的導(dǎo)航結(jié)構(gòu),允許工具以HTML文件的形式添加文檔。2.1.2Eclipse具有的優(yōu)點(diǎn)1.Eclipse是開(kāi)放源代碼的軟件。這意味著Eclipse不僅可以免費(fèi)使用,還可以通過(guò)研究源代碼學(xué)習(xí)世界上頂尖開(kāi)發(fā)人員的編程技術(shù),并可以共享遍布全球的開(kāi)發(fā)人員所貢獻(xiàn)的公共開(kāi)放源代碼庫(kù)。2.Eclipse是真正可擴(kuò)展并可配置的。Eclipse采用插件機(jī)制,猶如一個(gè)花瓶,你可以隨時(shí)向花瓶里面插花,也可以很容易將不再需要的花取出。目前,互聯(lián)網(wǎng)上免費(fèi)的、收費(fèi)的插件遍地開(kāi)花,插件開(kāi)發(fā)工作在國(guó)內(nèi)外也如火如荼。3.Eclipse支持眾多的開(kāi)發(fā)語(yǔ)言而不僅僅是Java。Eclipse只是給開(kāi)發(fā)人員提供了一個(gè)能夠擴(kuò)展系統(tǒng)功能的最小核心,基于擴(kuò)展點(diǎn)的插件體系結(jié)構(gòu)使得Eclipse支持多種語(yǔ)言成為可能。只要安裝相應(yīng)語(yǔ)言的插件,Eclipse就可以支持該種語(yǔ)言的開(kāi)發(fā)。目前,Eclipse已經(jīng)可以支持C、COBOL、PHP、Perl、Python等多種語(yǔ)言。4.Eclipse提供了對(duì)多重平臺(tái)特性的支持。開(kāi)發(fā)者可以使用他們感覺(jué)最舒適、最熟悉的平臺(tái),例如Windows、Linux、MacOS等。Eclipse對(duì)每個(gè)平臺(tái)都有其單獨(dú)的圖形工具包,這使得應(yīng)用程序具有接近本地操作系統(tǒng)的外觀和更好的性能。5.基于業(yè)界領(lǐng)先的OSGi規(guī)范。OSGi規(guī)范最早由SunMicrosystems、IBM、愛(ài)立信等于1999年推出,其服務(wù)平臺(tái)包括:服務(wù)網(wǎng)關(guān)、汽車(chē)、移動(dòng)電話、工業(yè)自動(dòng)化、建筑物自動(dòng)化、PDA網(wǎng)格計(jì)算、娛樂(lè)(如iPronto)和IDE等。基于OSGi的系統(tǒng)以微內(nèi)核形式運(yùn)行,因而能夠輕松實(shí)現(xiàn)軟件業(yè)界夢(mèng)寐以求的可熱插拔、動(dòng)態(tài)改變行為、穩(wěn)定高效的系統(tǒng)。Eclipse從3.1開(kāi)始,毅然拋棄了其原有的已經(jīng)獲得業(yè)界認(rèn)可的框架,采用OSGi作為其架構(gòu)。從Eclipse3.2版本開(kāi)始,Eclipse提供了基于OSGi開(kāi)發(fā)的支持,開(kāi)發(fā)者可以利用其開(kāi)發(fā)基于OSGi的系統(tǒng)了。6.Eclipse美輪美奐的人機(jī)界面受到廣泛贊譽(yù)。Eclipse提供了全新的SWT/JFaceAPI(而不是AWT/Swing),一改SWT/Swing單調(diào)、沉悶的界面風(fēng)格,使得開(kāi)發(fā)基于本地的具有豐富圖形界面的應(yīng)用程序成為可能,猶如一股春風(fēng)吹進(jìn)Java的桌面開(kāi)發(fā)領(lǐng)域,給人耳目一新的感覺(jué)。7.Eclipse由業(yè)界領(lǐng)先者推出,具有強(qiáng)大的行業(yè)力量。Eclipse基金會(huì)吸收了大量學(xué)術(shù)研究機(jī)構(gòu)、商業(yè)組織,領(lǐng)導(dǎo)Eclipse的長(zhǎng)遠(yuǎn)規(guī)劃和發(fā)展,并確保Eclipse處于軟件工具行業(yè)的領(lǐng)先地位。2.1.3使用XML的優(yōu)點(diǎn)XML[1](ExtensibleMarkupLanguage)即可擴(kuò)展標(biāo)記語(yǔ)言,它與HTML一樣,都是SGML(StandardGeneralizedMarkupLanguage,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)。Xml是Internet環(huán)境中跨平臺(tái)的,依賴(lài)于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴(kuò)展標(biāo)記語(yǔ)言XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用的空間更多,但XML極其簡(jiǎn)單易于掌握和使用。XML標(biāo)準(zhǔn)已經(jīng)國(guó)際化,它支持世界上大多數(shù)的文字。這源于它的統(tǒng)一代碼的新編碼標(biāo)準(zhǔn),這種編碼標(biāo)準(zhǔn)支持世界上所有以編程語(yǔ)言(如C/C++/BasicNisualBasic/JavaScript/Perl)編寫(xiě)的混合文本。凡能閱讀XML語(yǔ)言的軟件都能順利處理這些不同語(yǔ)言字符的任意組合。因此,XML不僅能在不同的計(jì)算機(jī)系統(tǒng)之間交換信息,而且能跨越國(guó)界和不同文化疆界交換信息。XML可用于不同類(lèi)型、系統(tǒng)間的交換格式的傳送,從而簡(jiǎn)化了從一個(gè)應(yīng)用程序到另一個(gè)應(yīng)用程序之間傳遞信息的工作。XML的特性給應(yīng)用軟件賦予了強(qiáng)大的功能和靈活性,也給開(kāi)發(fā)者和用戶(hù)帶來(lái)諸多好處,如下所示:1.?dāng)?shù)據(jù)可以被XML惟一標(biāo)識(shí),因此可以實(shí)現(xiàn)更有意義的網(wǎng)絡(luò)搜索。2.?dāng)?shù)據(jù)一旦建立,可將XML,文件發(fā)送到其他應(yīng)用軟件、對(duì)象或中間層服務(wù)器中做進(jìn)一步處理或發(fā)到客戶(hù)端瀏覽器中直接瀏覽。3.描述數(shù)據(jù)結(jié)構(gòu)的標(biāo)記可以被重復(fù)使用,XML能使異構(gòu)數(shù)據(jù)庫(kù)中的數(shù)據(jù)比較容易集成。4.XML具有擴(kuò)展性和靈活性的特點(diǎn),能描述各種應(yīng)用軟件中的數(shù)據(jù)。5.為實(shí)現(xiàn)本地計(jì)算和處理,提供了更為便捷的手段。6.可以根據(jù)客戶(hù)配置、使用者選擇和其他標(biāo)準(zhǔn),將本地XML數(shù)據(jù)動(dòng)態(tài)地表現(xiàn)出來(lái)。7.通過(guò)XML,可以實(shí)現(xiàn)粒狀數(shù)據(jù)的更新。8.XML的開(kāi)放是基于文本的格式的,可以用HTTP進(jìn)行傳送,無(wú)需對(duì)現(xiàn)有網(wǎng)絡(luò)進(jìn)行變更。9.XML實(shí)現(xiàn)了內(nèi)容與顯示完全分開(kāi),可以更加靈活地進(jìn)行編程,減少了服務(wù)器的工作量。10.增強(qiáng)了服務(wù)器的升級(jí)性能。由于XML是在HTML之后才發(fā)展起來(lái)的,所以許多人就將XML認(rèn)為是HTML的替代品。事實(shí)上,這兩種語(yǔ)言對(duì)數(shù)據(jù)的處理是不同的。例如,XML用來(lái)在Web上結(jié)構(gòu)化和描述數(shù)據(jù);HTML則更適合用來(lái)格式化數(shù)據(jù)。因?yàn)榇蟛糠諬TML網(wǎng)頁(yè)不但儲(chǔ)存數(shù)據(jù),也同時(shí)將數(shù)據(jù)格式化,任何對(duì)HTML的置換都將在數(shù)據(jù)儲(chǔ)存區(qū)內(nèi)發(fā)生。在許多情況下,XML可以接管資料儲(chǔ)存的工作(還有資料描述的工作),如此一來(lái),HTML只被用來(lái)作數(shù)據(jù)的格式化與腳本。而且可以將HTML格式轉(zhuǎn)化為XML格式。2.1.4Android簡(jiǎn)介及其特點(diǎn)Android[2]是Google于07年11月5日宣布的基于Linux平臺(tái)開(kāi)源手機(jī)操作系統(tǒng)名稱(chēng),該平臺(tái)由操作系統(tǒng)、中間件、用戶(hù)界面和應(yīng)用軟件組成,號(hào)稱(chēng)是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。Android是Google開(kāi)發(fā)的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。它包括操作系統(tǒng)、用戶(hù)界面和應(yīng)用程序——移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙。谷歌與開(kāi)放手機(jī)聯(lián)盟合作開(kāi)發(fā)了Android,這個(gè)聯(lián)盟由包括中國(guó)移動(dòng)、摩托羅拉、高通、宏達(dá)和T-Mobile在內(nèi)的30多家技術(shù)和無(wú)線應(yīng)用的領(lǐng)軍企業(yè)組成。通過(guò)與運(yùn)營(yíng)商、設(shè)備制造商、開(kāi)發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開(kāi)放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式的生態(tài)系統(tǒng)。我們認(rèn)為此舉必將推進(jìn)更好、更快的創(chuàng)新,為移動(dòng)用戶(hù)提供不可預(yù)知的應(yīng)用和服務(wù)。開(kāi)放性在優(yōu)勢(shì)方面,Android平臺(tái)首先就是其開(kāi)發(fā)性,開(kāi)發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到Android聯(lián)盟中來(lái)。顯著的開(kāi)放性可以使其擁有更多的開(kāi)發(fā)者,隨著用戶(hù)和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將很快走向成熟。開(kāi)發(fā)性對(duì)于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者來(lái)講,最大的受益正是豐富的軟件資源。開(kāi)放的平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的手機(jī)。掙脫運(yùn)營(yíng)商的束縛在過(guò)去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),手機(jī)應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。從去年iPhone上市,用戶(hù)可以更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過(guò)渡和提升,手機(jī)隨意接入網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談,你可以通過(guò)手機(jī)IM軟件方便地進(jìn)行即時(shí)聊天時(shí)?;ヂ?lián)網(wǎng)巨頭Google推動(dòng)的Android終端天生就有網(wǎng)絡(luò)特色,將讓用戶(hù)離互聯(lián)網(wǎng)更近。豐富的硬件選擇這一點(diǎn)還是與Android平臺(tái)的開(kāi)放性相關(guān),由于Android的開(kāi)放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞Symbian風(fēng)格手機(jī)一下改用蘋(píng)果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。不受任何限制的開(kāi)發(fā)商Android平臺(tái)提供給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不會(huì)受到各種條條框框的阻擾,可想而知,會(huì)有多少新穎別致的軟件會(huì)誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android難題之一。無(wú)縫結(jié)合的Google應(yīng)用如今叱咤互聯(lián)網(wǎng)的Google已經(jīng)走過(guò)10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶(hù)和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)手機(jī)將無(wú)縫結(jié)合這些優(yōu)秀的Google服務(wù)。2.2有關(guān)SQLite的介紹2.2.1SQLite簡(jiǎn)介SQLite[3]第一個(gè)Alpha版本誕生于2000年5月。至今已經(jīng)有10個(gè)年頭了。SQLite也迎來(lái)了一個(gè)版本SQLite3已經(jīng)發(fā)布。SQLite是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。2.2.2SQLite功能特點(diǎn)SQLite是一種小型的嵌入式,其主要功能特點(diǎn)如下:(1)ACID事務(wù)。(2)零配置一無(wú)需安裝和管理配置。(3)儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù)。(4)數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享。(5)支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。(6)足夠小,大致3萬(wàn)行C代碼,250K。(7)比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快。(8)簡(jiǎn)單,輕松的API。(9)包含TCL綁定,同時(shí)通過(guò)Wrapper支持其他語(yǔ)言的綁定。(10)良好注釋的源代碼,并且有著90%以上的測(cè)試覆蓋率。(11)獨(dú)立:沒(méi)有額外依賴(lài)。(12)Source完全的Open,你可以用于任何用途,包括出售它。(13)支持多種開(kāi)發(fā)語(yǔ)言,C,PHP,Perl,Java,ASP.NET,Python。第三章系統(tǒng)分析與設(shè)計(jì)本來(lái)電防火墻在Eclipse下編譯完成,并使用XML腳本語(yǔ)言結(jié)合Java代碼編寫(xiě)整體程序,前臺(tái)界面設(shè)計(jì)采用的是XML靜態(tài)文件,并且在代碼中有相應(yīng)的動(dòng)態(tài)設(shè)置,后臺(tái)數(shù)據(jù)庫(kù)采用了SQLite,并通過(guò)一系列的設(shè)計(jì)使來(lái)電防火墻逐步趨于完善。3.1系統(tǒng)功能分析本來(lái)電防火墻主要包括三個(gè)模塊:用戶(hù)界面UI、數(shù)據(jù)庫(kù)模塊和主程序模塊。本手機(jī)來(lái)電防火墻主要是作為拒接電話設(shè)計(jì)的。通過(guò)黑名單的新增、修改和刪除,來(lái)對(duì)手機(jī)來(lái)電進(jìn)行管理。如果來(lái)電號(hào)碼不在黑名單中,則按照手機(jī)默認(rèn)的情景模式響應(yīng);如果來(lái)電號(hào)碼在黑名單中,則直接掛斷該電話,并且彈出一個(gè)對(duì)話框提示用戶(hù):來(lái)電在黑名單中,已拒接。本手機(jī)來(lái)電防火墻的三個(gè)模塊如下圖3-1所示:來(lái)電防火墻主程序來(lái)電防火墻主程序數(shù)據(jù)庫(kù)用戶(hù)界面UI來(lái)電掛斷判斷函數(shù)退出界面黑名單界面動(dòng)態(tài)主界面本手機(jī)來(lái)電防火墻開(kāi)發(fā)的時(shí)候,我首先繪制的是所有用戶(hù)界面UI的整體框架圖,如3-2所示:黑名單黑名單新增幫助文本黑名單幫助退出修改刪除確定退出?確定取消圖3-2整體框架圖3.2創(chuàng)建數(shù)據(jù)庫(kù)文件本程序中,后臺(tái)數(shù)據(jù)庫(kù)用的SQLite數(shù)據(jù)庫(kù),只用到了黑名單這一個(gè)表格。黑名單主要是用來(lái)保存拒接號(hào)碼的。包括編號(hào)、號(hào)碼簡(jiǎn)介兩個(gè)字段。其中_id(編號(hào))設(shè)定為主鍵,number(號(hào)碼)是必要字段,編碼是自動(dòng)獲取,從1開(kāi)始以整數(shù)上升。黑名單表結(jié)構(gòu)如表3-1所示:表3-1用戶(hù)注冊(cè)表字段數(shù)據(jù)類(lèi)型長(zhǎng)度允許空_id整型1否number整型4否3.3系統(tǒng)界面設(shè)計(jì)實(shí)現(xiàn)本程序的用戶(hù)界面設(shè)計(jì)采用的是XML文件,涉及到主界面,黑名單界面等實(shí)現(xiàn)。3.3.1可視化控件設(shè)置可視化控件[4]是直接與用戶(hù)交互的對(duì)象。Android除了支持自定義控件以外,自身也提供了非常豐富的各種可視化控件。這些控件大都已經(jīng)完整地實(shí)現(xiàn)其功能,所以一般情況下開(kāi)發(fā)人員只需要設(shè)置它們的屬性,就可以定義一個(gè)可交互的用戶(hù)界面控件了。設(shè)置控件屬性的方法有兩種:一種是在XML文件中靜態(tài)設(shè)置,另一種則是在Java代碼中動(dòng)態(tài)設(shè)置。要?jiǎng)?chuàng)建用戶(hù)界面,首先我們必須了解的是View類(lèi)。View類(lèi)是可視化控件的基類(lèi),它主要提供了控件繪制和事件處理的方法。而可視化控件,是指重新實(shí)現(xiàn)了View的繪制和事件處理方法并且最終與用戶(hù)交互對(duì)象,如文本顯示、按鈕等。ViewGroup類(lèi)也是繼承自View類(lèi),其最大的特點(diǎn)是可以有子控件。子控件是View類(lèi)的對(duì)象,當(dāng)然也可以是ViewGroup類(lèi)的對(duì)象,即ViewGroup可以嵌套。實(shí)際上,這是采用了設(shè)計(jì)模式中的Composite模式,系統(tǒng)把對(duì)象以樹(shù)形結(jié)構(gòu)組織起來(lái),從而達(dá)到了“部分——整體”的層次結(jié)構(gòu),使得客戶(hù)端對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 在Android中除了想Listview這種需要有子控件的控件類(lèi)繼承自ViewGroup以外,還有Layout類(lèi)也同樣繼承自ViewGroup。需要說(shuō)明的是,布局默認(rèn)情況下并不直接顯示給用戶(hù),其主要功能在于控制子控件在屏幕上擺放的位置。所以通??梢?jiàn)的Android程序都是可視化控件和布局組成的。3.3.2布局當(dāng)我們手握著一些已經(jīng)被設(shè)置好了的控件的時(shí)候,就該思考怎樣按照你的設(shè)計(jì)把他們放在Android設(shè)備的屏幕上了。Layout就是負(fù)責(zé)管理控件在屏幕的位置的類(lèi)。AndroidSDK已經(jīng)內(nèi)置了幾種簡(jiǎn)單的布局[2]模型,通過(guò)這幾種布局模型的組合、嵌套并設(shè)置子控件的布局參數(shù),我們完全可以構(gòu)建出各種復(fù)雜的用戶(hù)界面。1.線性布局[6]線性布局應(yīng)該是應(yīng)用程序中最常用的布局方式,他提供了控件水平或者垂直排列的模型,同時(shí)我們可通過(guò)設(shè)置子控件的weight布局參數(shù)控制各個(gè)控件在布局中的相對(duì)大小。2.表格布局表格布局模型以行列的形式管理子控件,每一行為一個(gè)TableRow的對(duì)象,也可為一個(gè)View的對(duì)象。TableRow可添加子控件,每添加一個(gè)子控件為一列。3.相對(duì)布局相對(duì)布局的子控件會(huì)根據(jù)它們所設(shè)置的參照控件和參數(shù)進(jìn)行相對(duì)布局。參照控件可以是父控件,也可以是其他子控件,但被參照的控件必須要在參照它的控件之前定義。4.單幀布局單幀布局最簡(jiǎn)單的布局模型,在這種布局下每個(gè)添加的子控件都被放在布局的左上角,并覆蓋在前一個(gè)控件的上層。5.坐標(biāo)布局坐標(biāo)布局的子控件需要制定相對(duì)于此坐標(biāo)布局的橫、縱坐標(biāo)值,否則將會(huì)像FrameLayout那樣被排在左上角。手機(jī)應(yīng)用需要適用于不同的屏幕大小,而這樣布局模型不能自適應(yīng)屏幕尺寸大小,所以應(yīng)用的相當(dāng)少。3.4Eclipse環(huán)境搭建數(shù)據(jù)庫(kù)的連接方式主要有兩種:ODBC連接和OLEDB連接。3.4.1開(kāi)發(fā)環(huán)境搭建1.開(kāi)始Eclipse[3],然后選擇Help>SoftwareUpdates>FindandInstall,如圖3-3圖3-3FindandInstall2.對(duì)話框出現(xiàn)后,選擇Searchfornewfeaturestoinstall點(diǎn)擊Next。如圖3-4圖3-4Searchfornewfeaturestoinstall3.點(diǎn)擊NewRemoteSite。如圖3-5圖3-5NewRemoteSite4.在對(duì)話框中,輸入遠(yuǎn)程站點(diǎn)的名字,輸入站點(diǎn)如下:/android/eclispse/點(diǎn)擊Ok 5.你可以看到新的站點(diǎn)添加到搜索列表中(并檢查),點(diǎn)擊Finish。6.在下面的搜索結(jié)果對(duì)話框,選擇復(fù)選框AndroidPlugin>DeveloperTools。它將會(huì)檢查特性:"AndroidDeveloperTools"和"AndroidEditors"。Android編輯器的特性是可選的,但我們推薦安裝它,如果你選擇安裝,需要前面提到的WST插件,點(diǎn)擊Next。如圖3-6:圖3-6搜索結(jié)果對(duì)話框7.閱讀許可協(xié)議,然后選擇接受許可協(xié)議,點(diǎn)擊Next。8.點(diǎn)擊Finish。9.ADT插件沒(méi)有簽名,你可以點(diǎn)擊“InstallAll“來(lái)安裝所有東西。10.重啟Eclipse。3.4.2創(chuàng)建模擬器 1.打開(kāi)Eclipse—windows—AndroidSDKandAVDManager[4]。如圖3-7:圖3-7創(chuàng)建模擬器從“AndroidSDKandAVDManager”窗口的左側(cè)選擇“VirtualDevices”。1)選擇“New”。2)輸入一個(gè)AVD名稱(chēng)。3)選擇一個(gè)Target。4)輸入模擬的SDCard的容量大小。5)選擇一個(gè)外觀皮膚Skin。1.讓模擬器外觀大小像G1,MyTouch3G,Hero,等手機(jī)設(shè)備。保留默認(rèn)的skin設(shè)置值。2.模擬MotorolaDroid。選擇WVGA854。3.模擬其他的設(shè)備。選擇列表內(nèi)其他的選項(xiàng)。6)然后“CreateAVD”。第四章程序界面與代碼實(shí)現(xiàn)本程序主要包括三個(gè)模塊,即用戶(hù)界面模塊、數(shù)據(jù)庫(kù)登錄模塊和主程序模塊。下面將介紹程序的主要開(kāi)發(fā)難點(diǎn)、主界面和關(guān)鍵代碼。4.1程序開(kāi)發(fā)技術(shù)難點(diǎn)本程序在開(kāi)發(fā)的過(guò)程中,遇到了不少的難點(diǎn)。其中主要的兩個(gè)難點(diǎn),一個(gè)是來(lái)電后判斷來(lái)電號(hào)碼是否在黑名單中,另一個(gè)是如果該號(hào)碼存在于黑名單中,如何掛斷電話的問(wèn)題。4.1.1判斷來(lái)電號(hào)碼 對(duì)于這個(gè)難點(diǎn),我開(kāi)始思考的解決辦法是把數(shù)據(jù)庫(kù)的每一行讀出來(lái)之后與來(lái)電號(hào)碼進(jìn)行比較,可是這個(gè)方法在實(shí)現(xiàn)的時(shí)候比較麻煩,問(wèn)題出在循環(huán)語(yǔ)句上,最終沒(méi)有成功。我又想了另一個(gè)方法,可以先將黑名單中的數(shù)據(jù)從數(shù)據(jù)庫(kù)中讀到一個(gè)字符串?dāng)?shù)組當(dāng)中,然后再將來(lái)電號(hào)碼與這個(gè)字符串?dāng)?shù)組的每一個(gè)字符串(也就是每一個(gè)電話號(hào)碼)進(jìn)行比較,這樣實(shí)現(xiàn)起來(lái)就比較的簡(jiǎn)單了。 在來(lái)電號(hào)碼與字符串?dāng)?shù)組比較的時(shí)候,我寫(xiě)了一個(gè)判斷函數(shù),該函數(shù)在程序中多次用到,比如在新增號(hào)碼的時(shí)候判斷號(hào)碼是否已存在于黑名單中。 (1)將數(shù)據(jù)庫(kù)中的號(hào)碼讀到數(shù)組中的代碼實(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版本里,有一個(gè)Phone類(lèi),不過(guò),在1.0之后被刪除了,被設(shè)置為私有了,只能系統(tǒng)調(diào)用,也就是不能直接引用Phone類(lèi)掛斷電話的方法了,所以掛斷電話成為了程序開(kāi)發(fā)過(guò)程中的一個(gè)難點(diǎn)。 于是,我查閱了相關(guān)的資料,找到了一個(gè)解決的辦法,那就是利用Java的反射機(jī)制。 Java反射機(jī)制[8]介紹: (1)Java反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱(chēng)為java語(yǔ)言的反射機(jī)制。(2)Java反射機(jī)制主要提供了以下功能:在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類(lèi);在運(yùn)行時(shí)構(gòu)造任意一個(gè)類(lèi)的對(duì)象;在運(yùn)行時(shí)判斷任意一個(gè)類(lèi)所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法;生成動(dòng)態(tài)代理。于是我通過(guò)Java的反射機(jī)制,來(lái)調(diào)用被private的endcall方法,實(shí)現(xiàn)代碼如下所示:TelephonyManagertManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//初始化iTelephony,得到該對(duì)象的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類(lèi)的endcalltry{ ITelephonyiTelephony=(ITelephony)getITelephonyMethod.invoke(tManager,(Object[])null); try{ iTelephony.endCall(); }4.2程序各模塊的實(shí)現(xiàn)4.2.1用戶(hù)界面(1)該模塊主要是各個(gè)用戶(hù)界面的,這些界面都又相應(yīng)的XML文件生成。程序主界面如4-1所示:圖4-1主程序界面該界面通過(guò)mian.xml文件來(lái)靜態(tài)的實(shí)現(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)點(diǎn)擊黑名單后,會(huì)打開(kāi)黑名單界面黑名單界面如圖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(),"該號(hào)碼已經(jīng)存在!",Toast.LENGTH_SHORT).show();/*添加數(shù)據(jù)到數(shù)據(jù)庫(kù)*/else{myToDoDB.insert(myEditText.getText().toString());/*重新查詢(xún)*/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幫助界面該界面是通過(guò)代碼動(dòng)態(tài)實(shí)現(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)點(diǎn)擊退出,彈出退出界面,如圖4-4所示:圖4-4退出界面4.2.2數(shù)據(jù)庫(kù)模塊該模塊主要是對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理的。黑名單連到SQLite[6]數(shù)據(jù)庫(kù)后,可以對(duì)黑名單進(jìn)行新增、修改和刪除。界面如4-5所示:圖4-5數(shù)據(jù)庫(kù)修改界面數(shù)據(jù)庫(kù)新增、修改和刪除的代碼如下: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主程序模塊主程序模塊包括了各個(gè)界面的切換操作,來(lái)電后把來(lái)電號(hào)碼與黑名單中的數(shù)據(jù)進(jìn)行比較、判斷的代碼。來(lái)電后拒接的界面如圖4-6所示圖4-6游客瀏覽主界面來(lái)電后,手機(jī)自動(dòng)判斷來(lái)電號(hào)碼是否在數(shù)據(jù)庫(kù)中,如果存在則掛斷電話。主要代碼如下:publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//Intentintent=newIntent(this,Firewall1.class);//sendBroadcast(intent);//使用數(shù)據(jù)庫(kù)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){/*取得手機(jī)是開(kāi)機(jī)狀態(tài)*/caseTelephonyManager.CALL_STATE_IDLE://mTextView01.setText(R.string.str_CALL_STATE_IDLE);try{

溫馨提示

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

評(píng)論

0/150

提交評(píng)論