加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 來電黑名單
文/陳彥文、彭亦暄 2010/9/11 下午 08:22:24

手機程式設計入門與應用─鈴聲控制範例
手機程式設計入門與應用─錄音程式範例
手機程式設計入門與應用─音樂播放器範例
手機程式設計入門與應用─影片播放器範例
手機程式設計入門與應用─繪圖板範例
手機程式設計入門與應用─觸控操作範例
手機程式設計入門與應用─Matrix應用範例
手機程式設計入門與應用─線上查詢匯率
手機程式設計入門與應用─擲骰子遊戲
手機程式設計入門與應用─來電黑名單
本節範例實作一個來電黑名單,只要在黑名單內的電話打來,程式會自動將其轉為靜音模式,而這些黑名單的資料會儲存在SD卡中的BlackList資料夾中。

在程式中,我們也將黑名單註冊為Service,這樣即使退出了黑名單的程式也可以繼續保持黑名單功能。程式總共分為兩部分:第一部分為Activity,用來讀取電話連絡人資訊以及設定黑名單。

第二部分為Service,當有電話來電時會去檢查此來電是否為名單上的電話號碼,若是則將此通電話鈴聲設為靜音。程式結果如下圖。




程式一開始會抓取手機的連絡人資料並顯示在電話簿的Tab中,程式碼如下:




利用ContentResolver來抓取系統中的連絡人資料,並將資料儲存在ContactInfo這個List中。如下:




接著顯示利用【Adapter】將【ContactInfo】顯示在電話簿的Tab中,如下:




接著系統去抓取在SD卡中是否有已存之黑名單列表,若有則讀取至黑名單Tab中,由於黑名單資料存放在SD卡中的【BlackList】資料夾下,故一開始必須檢查此資料夾是否存在,若不存在則要新建一資料夾,如下:




而我們將黑名單資料建立在【BlackList】資料夾下的blackList.txt中,所以接著檢查此檔案是否存在,若不存在則建立一個新檔案,若已有檔案存在則將檔案讀取至程式當中,如下:




抓取完後,同電話簿一樣將其顯示在黑名單Tab中。在範例中只要點擊電話簿的號碼即可將此號碼加入或移除黑名單,當號碼非黑名單時,點擊為加入黑名單,當號碼已經在黑名當時點擊即可移除黑名單。而在黑名單部分的號碼點擊後即可移除黑名單。

程式判斷此號碼是否在黑名單內,若是則會呼叫【showDialog】來詢問使用者是否要將其移除黑名單,若否,則會詢問使用者是否要將此號碼加入黑名單。當使用者點擊黑名單Tab內的號碼時,則只有移除此號碼的功能,如下:




在此我們自訂了兩個警告視窗,定義如下:




當使用者選擇將號碼加入黑名單時就將此號碼加入【file_BlackList】當中,而當使用者選擇將號碼移除黑名單時則將此號碼至【file_BlackList】移除,由於加入以及移除都會更改黑名單的狀態,所以在此呼叫自定義的【UpdateBlackListFile()】來更新黑名單狀態,如下:




其中,【adapterBlackList.notifyDataSetChanged()】方法讓黑名單的adapter做更新的動作,接著將黑名單內的資料寫入blackList.txt當中。當黑名單設定完成後,利用Menu來啟動或是停止黑名單的Service,當啟動Service後,利用finish()將黑名單程式結束掉並且啟動自訂的PhoneService服務,在服務啟動時會抓取存在SD卡內的黑名單資料,接著利用PhoneStateListener來監聽電話狀態,當有電話打進來時,PhoneService會確認此號碼是否再黑名單上,若是則更改為靜音模式,當電話結束後再將電話鈴聲轉為普通模式,程式碼如下:




而設定靜音模式則需使用到AudioManager的【setRingerMode】來設定為NORMAL或是SILENT。而在收到為CALL_STATE_RINGING狀態時,則會去檢查號碼是否為黑名單,檢查的IsInBlackList如下:




由於在檔案中儲存的格式為「名字 : 電話號碼」,所以我們利用【split()】方法將讀進來的黑名單資料切成一個陣列,分別放置名字和電話號碼,接著比較打進來的號碼是否再黑名單內。


來電黑名單展示
【本文範例來自《 手機程式設計入門與應用 Android、iPhone、Windows Mobile》】