項目描述:該項目爲基於Android平臺的手機通信錄,主要模塊分爲四個部分:聯繫人管理模塊,通話記錄管理模塊,短信管理模塊,系統設置模塊。 java
系統結構圖以下: android
本項目啓動時間:2014年5月28日 sql
說明:本次開發項目的全部源碼所有會分享給你們。開發此項目的目的有這幾點:1、鍛鍊獨立開發項目的能力,2、增長對Android開發的瞭解,3、熟悉Android通信錄機制。 數據庫
閒話很少說,正式開始! 瀏覽器
技術要點一:熟悉Android聯繫人數據庫contacts2.db ide
1.得到聯繫人數據庫contacts2.db文件 工具
步驟1、打開Eclipse而且運行模擬器; server
步驟2、調出文件瀏覽器File Explorer(從工具欄中依次打開Windows—>Show View -> Other -> Android - > File Explorer),如圖所示: sqlite
步驟3、打開文件瀏覽器,並在此目錄data->data->com.android.providers.contacts->databases下,找到數據庫:contacts2.db,注意:若是是想導出真機上的contacts2.db數據庫,真機必須是通過root之後才能導出,不然在data目錄層就打不開。 ip
步驟4、選中contacts2.db,而且在File Explorer的右上角,選擇導出鍵,將contacts2.db數據庫導入到電腦上。
步驟5、下載數據庫可視化軟件,用來幫咱們打開contacts2.db,查看其中的表結構,這裏我推薦使用sqlitestudio,附上下載連接:連接地址
步驟6、安裝sqlitestudio,安裝成功後,打開軟件並導入contacts2.db數據庫
步驟7、雙擊Contacts2數據庫,就能看到Contacts2.db裏面全部的表
步驟9、雙擊data表,查看錶的結構
步驟10、點擊工具欄上方的數據,就能夠查看錶中的內容
2.介紹contacts2.db數據庫
有關通信錄的資料都放在contacts2.db中這個數據庫中,本次項目開發主要使用到的表分別以下:
contacts表
Contacts表是對raw contact表按照account type和account name進行的聚合,Contacts表的聚合邏輯在ContactAggregator.java文件中。
結構圖以下:
數據圖以下:
raw_contacts表
raw_contacts表描述了聯繫人每一個帳戶下的數據,根據帳戶名和帳戶類型字段進行區分。即同一個聯繫人可能在raw_contact表中有多個記錄,每一個記錄分屬於不一樣的帳戶。因此一個contact_id可能對應多個raw_contact id,爲何一個contact_id會對應多個raw_contact_id,相信讀者看到這裏就會知道該問題的答案了。從這裏咱們也發現android是容許一個聯繫人綁定多個帳戶的。
須要注意的字段爲ACCOUNT_NAME,ACCOUNT_TYPE,DELETED、VERSION。
ACCOUNT_NAME和ACOUNT_TYPE我就不詳細描述了,DELETED標誌位的做用是,當刪除一條用戶記錄時,能夠暫時再內部維護一條刪除狀態的記錄,待該帳戶的server端刪除完畢後,再從本地刪除,其實用戶能夠沒必要關心該字段的內部機制,只須要注意在查詢raw contact表時,能夠根據DELETED字段過濾掉已刪除的記錄。VERSION字段也是一個頗有用的字段,能夠根據該字段來肯定聯繫人信息是否發生變化,若是您本地保存了聯繫人信息,那麼就能夠根據VERSION信息來和系統數據庫的聯繫人信息進行比較,來肯定是否須要作UPDATE操做。
結構圖以下:
數據圖以下(兩張圖合併起來):
data表
data表存儲了聯繫人的具體信息,好比電話、email等信息,從下面的圖咱們能夠看書每一個raw contact表中的記錄會對應多個data信息,這不難理解,一個聯繫人可能有多個電話號碼,多個email,這些信息是如何存儲在data表中的呢?其實不難解決這個問題,定義一個專門的描述字段用來定義該記錄的類型,即MIME TYPE,而後根據MIME TYPE來區分該記錄的類型,而後每種信息都會有一個本身的類型。
結構圖以下:
數據以下(兩張圖合併起來):
calls表
calls表主要做用是用來存放通話記錄,主要使用到這些字段date(日期),number(電話號碼),type(通話記錄類型),name(聯繫人姓名)。
結構圖以下:
數據圖以下(兩張圖合併起來):
其中以上表中,contacts表,raw_contacts表,data表之間的關係以下圖所示:
這三張表是聯繫人數據庫的最主要的數據表,其餘的數據只是提供一些輔助功能,咱們先詳細介紹這三張表的結構和使用方法。 從上圖咱們能夠看書contacts表和raw_contact表是一對多的關係,contacts表是對raw_contact表記錄的聚合,即contacts表中是沒有帳戶(Account)的概念的,而raw_contact表是聯繫人特定帳戶的的概要信息,Data表則存儲了聯繫人的詳細信息,好比email、電話號碼等。