摘 要:來電防火墻主要基于黑白名單的電話和短信過濾功能,再結合數(shù)據(jù)庫的使用,達到來電或者信息屏蔽黑名單的作用。黑名單連接到數(shù)據(jù)庫,可以進行簡單的添加、修改、刪除等操作。來電或者收到信息之后,手機自動搜索黑名單,將來電號碼與黑名單中的號碼進行比較,如果有改號碼在黑名單中,則手機直接將該電話或者短信屏蔽掉。此外還有基于GPS的手機防盜功能;電話錄音和留言功能;隱私空間。系統(tǒng)的界面使用Photoshop的按鈕控件、XML語言界面設計使操作更簡單。系統(tǒng)使用SQLite數(shù)據(jù)庫,Eclipse開發(fā)工具,Android SDK開發(fā)環(huán)境,利用Google Android API、java語言來實現(xiàn)。最后,對系統(tǒng)采用模擬器預覽效果,并對系統(tǒng)進行了部署和真實的體驗測試。
關鍵詞:Android;智能手機;防火墻
中圖分類號:TN929.53;TP393.08
目前隨著移動設備越來越普及以及移動設備的硬件的提升,移動設備的功能越來越完善。移動設備的系統(tǒng)平臺也日漸火熱起來。3G時代的到來也是助推移動設備的火熱發(fā)展的一個大因素。目前國內(nèi)最常見的移動開發(fā)平臺有Symbian,iPhone,Windows Phone以及當下正在逐步興起的Android。目前為止國內(nèi)已經(jīng)有很多Android系統(tǒng)用戶[1]。
1 需求分析
1.1 黑/白名單的電話和短信過濾功能分析
1.1.1 黑名單可選擇模式
黑名單的有三種攔截模式:只攔截電話,只攔截短信,兩者都攔截。在黑名單表中有姓名、電話、攔截模式等字段。實現(xiàn)原理:軟件啟動后有一個服務)service)在后臺運行,在服務中注冊有一個監(jiān)聽器,監(jiān)聽電話的狀態(tài),當有電話來時,狀態(tài)會變成響鈴狀態(tài),在這里可以取得來電的號碼。這時遍歷表中的黑名單,看是否有號碼和來電號碼匹配,如果匹配就是該攔截的號碼,這里就把電話結束掉,并寫入攔截表中,彈出通知告知有電話被攔截[2]。
短信的攔截和電話攔截不一樣,有兩種實現(xiàn)方法:
(1)接收系統(tǒng)短信廣播:當收到短信時,Android系統(tǒng)會發(fā)出一個廣播,通知收到短信,攔截短信基于Android中的廣播機制。Android中的廣播機制是所有注冊了該廣播監(jiān)聽器的程序都收到廣播(只要先收到廣播的應用程序沒有結束掉該廣播),當收到廣播就會觸發(fā)收到廣播的事件,可以在這里處理短信,本程序采用這種方法[3]。
優(yōu)點:可以攔截來信在狀態(tài)欄的顯示通知,適合短信攔截。
缺點:可以發(fā)展成MU,在后臺悄悄的收/發(fā)短信
(2)應用觀察者模式,監(jiān)聽短信數(shù)據(jù)庫,操作短信內(nèi)容:當系統(tǒng)收到短信時,會將短信寫入短信數(shù)據(jù)庫,可以注冊一個監(jiān)聽器來監(jiān)聽短信數(shù)據(jù)庫的變化。當短信數(shù)據(jù)庫變化時就觸發(fā)這個事件,在這里可以處理短信。
優(yōu)點:操作方便,適合簡單的短信應用。
缺點:來信會在狀態(tài)欄顯示通知信息。
1.1.2 白名單攔截模式
白名單攔截是指除了名單中有的號碼,其它號碼都攔截。這種攔截方式可以真正做到把不想接聽的電話和不想收到的短信全部排除在外。白名單攔截方式和黑名單類似。流程:有電話進來,從數(shù)據(jù)庫中查詢所有的號碼,看看是不是白名單中的號碼,如果是就接聽電話,否則就掛斷,寫入攔截數(shù)據(jù)表,彈出通知有攔截電話;短信的操作和這類似。
1.1.3 多種方式添加黑/白名單
添加黑/白名單主要是依賴Android中的內(nèi)容提供者(ContentProvider)和內(nèi)容訪問者(ContentResolver)的機制,在這里主要是使用了系統(tǒng)的ContentProvider。
(1)系統(tǒng)聯(lián)系人:可直接從系統(tǒng)聯(lián)系人中添加名單到黑/白名單,利用上面提到的系統(tǒng)提供的ContentProvider來訪問聯(lián)系人數(shù)據(jù)庫,查詢所有聯(lián)系人的名字和號碼信息??膳刻砑拥胶?白名單數(shù)據(jù)庫。
(2)通話記錄:可從通話記錄中添加名單到黑/白名單,同樣使用系統(tǒng)提供的ContentProvider來訪問通話記錄數(shù)據(jù)庫。
(3)短信記錄:可從短信記錄添加名單到黑/白名單,也是使用了系統(tǒng)提供的ContentProvider來訪問通話記錄數(shù)據(jù)庫。從短信記錄添加進去的是短信的內(nèi)容和號碼,而不是名字。
(4)手動輸入:當然,我們可以手動輸入要添加的號碼和名字。
1.2 關鍵字的短信過濾功能分析
原理分析:注冊廣播接收器,監(jiān)聽系統(tǒng)短信廣播,操作短信內(nèi)容: 當系統(tǒng)收到短信時,會向系統(tǒng)發(fā)送廣播,可以注冊一個監(jiān)聽器來接收系統(tǒng)的短信廣播。在這里可以查看短信中包括的內(nèi)容是否有我們的關鍵字,如果有就攔截該短信;如果沒有就不做處理。關鍵字有系統(tǒng)自帶關鍵字和手動添加關鍵字。
2 程序設計
2.1 基于黑/白名單的電話過濾功能設計
2.1.1 設計思路
當有來電時取得來電號碼,把這個號碼交給來電處理類PhoneHandler,在這個類里面從數(shù)據(jù)庫中取出數(shù)據(jù)對比這個號碼符合我們的什么操作。主要是基于一張名單表(list),在這張表里有來電號碼(list_phone),姓名(list_name),名單類型(list_type),攔截類型(list_method),攔截說明(list_method_bak)等。首先判斷攔截模式,然后判斷是否在名單中,最后判斷號碼類型。判斷出結果后來決定是否攔截這個電話或這條短信。
2.1.2 關鍵代碼及解釋
在本程序中注冊了一個電話監(jiān)聽器和一個短信廣播接收器。電話監(jiān)聽器時刻監(jiān)聽Android電話服務程序,電話有三種狀態(tài):空閑,響鈴和摘機。平時電話處于空閑狀態(tài),當有電話進來時就進入響鈴狀態(tài),在這里能得到來電號碼,這時把來電號碼交給電話處理類PhoneHandler來處理。
還有一個廣播接收器程序,它負責監(jiān)聽短信廣播。當有短信進來時,Android系統(tǒng)會向整個系統(tǒng)發(fā)送一個廣播,所有注冊了該廣播接收器的程序都能接收到這個廣播,但是廣播的發(fā)送是有順序的,從優(yōu)先級別高的到優(yōu)先級別低的。在本程序中把收聽廣播的優(yōu)先級別設置為1000,它會先收到短信廣播。
2.2 基于關鍵字的短信過濾功能的設計
設計思路:在廣播中取到短信的內(nèi)容,利用java.lang.String類的contains(key)方法可以判別短信內(nèi)容是否key這個關鍵字,如果包涵就判別這條短信是我們該攔截的垃圾短信。在數(shù)據(jù)庫中有一張關鍵字表(smskey),當收到短信后去遍歷這張表中的關鍵字,就可以得到我們的結果。
3 結束語
經(jīng)過測試,本系統(tǒng)實現(xiàn)了預定要實現(xiàn)的功能,并且運行良好。實現(xiàn)的基本功能有基于黑/白名單的電話和短信攔截功能,基于關鍵字的短信攔截功能等。在實現(xiàn)這些功能的同時,仍然還有需要改進的東西,用戶體驗效果待改進等。
參考文獻:
[1]劉兵,吳煜煜.Linux實用教程[M].北京:中國水利水電出版社,2004,48.
[2]柯元旦.Android內(nèi)核剖析[M].北京:電子工業(yè)出版社,2011,32.
[3]孫曉宇.Android手機界面管理系統(tǒng)的設計與實現(xiàn)[D].北京:北京郵電大學,2009.