1. 程式人生 > >Android 聯絡人資料庫表詳解

Android 聯絡人資料庫表詳解

現在有很多應用都需要讀取我們的聯絡人列表,比如,微信,QQ等等。還有些專門的通訊錄應用,就可以不用官方自帶的簡陋的通訊錄,其實所有這些app全部是讀取的同一個資料庫,就是官方提供唯一的聯絡人資料庫。今天就為大家來講解下這個資料庫的說明和使用。

1.首先手機新增幾個聯絡人
新增聯絡人
所有聯絡人

2.然後在此路徑下可以找到檔案:/data/data/com.android.providers.contacts/databases/contact2.db
聯絡人資料庫路徑

3.匯出檔案,將其匯入視覺化資料庫管理器當中(這裡用的是SQLite Expert Personal)
資料庫管理器

我去。。這麼多表? 無從下手有沒有?彆著急,這裡雖然表很多,其實要用的只有4張表,這裡給大家標註下
用到4張表

下面分別對這4張表分別說明:
1、contacts表
contacts表
_id :表的ID,主要用於其它表通過contacts 表中的ID可以查到相應的資料。
display_name: 聯絡人名稱
photo_id:頭像的ID,如果沒有設定聯絡人頭像,這個欄位就為空
times_contacted:通話記錄的次數
last_time_contacted: 最後的通話時間
lookup :是一個持久化的儲存,因為使用者可能會改名,但是它改不了lookup
該表儲存了本機儲存的所有聯絡人,每個聯絡人佔一行,該表儲存了聯絡人的ContactID、聯絡次數、最後一次聯絡的時間、是否含有號碼、是否被新增到收藏夾等資訊。

2、raw_contacts表
raw_contacts表
version :版本號,用於監聽變化
deleted :刪除標誌, 0為預設 1 表示這行資料已經刪除
display_name : 聯絡人名稱
last_time_contacts : 最後聯絡的時間
該表儲存了所有建立過的手機聯絡人,每個聯絡人佔一行,表裡有一列標識該聯絡人是否被刪除,該表儲存了兩個ID: RawContactID和ContactID,從而將contacts表和raw_contacts表聯絡起來。該表儲存了聯絡人的RawContactID、ContactID、聯絡次數、最後一次聯絡的時間、是否被新增到收藏夾、顯示的名字、用於排序的漢語拼音等資訊。

3、mimetypes 表
mimetypes 表
該表定義了所有的MimeTypeID,即聯絡人的各個欄位的唯一標誌。

4、data表
data表
raw_contact_id:通過raw_contact_id可以找到 raw_contact表中相對的資料。
data1 到 data15 這裡儲存著聯絡人的資訊 聯絡人名稱 聯絡人電話號碼 電子郵件 備註 等等。
該表儲存了所有建立過的手機測聯絡人的所有資訊,每個欄位佔一行 ,該表儲存了兩個ID: MimeTypeID和RawContactID,從而將data表和raw_contacts表聯絡起來。聯絡人的所有資訊儲存在列data1至data15中,各列中儲存的內容根據MimeTypeID的不同而不同。如儲存號碼(MimeTypeID=5)的那行資料中,data1列儲存號碼,data2列儲存號碼型別(手機號碼、家庭號碼、工作號碼等)。

下面說下操作聯絡人的方法
首先要是加入這兩個許可權

<!-- 讀聯絡人許可權 -->
 <uses-permission android:name="android.permission.READ_CONTACTS"/>
 <!-- 寫聯絡人許可權 -->
 <uses-permissionandroid:name="android.permission.WRITE_CONTACTS" />

讀取聯絡人需要步驟如下:
1.先讀取contacts表,獲取ContactsID;
2.再在raw_contacts表中根據ContactsID獲取RawContactsID;
3.然後就可以在data表中根據RawContactsID獲取該聯絡人的各資料了。

新建聯絡人步驟如下:
1.新建聯絡人時, 根據contacts、raw_ contacts兩張表中ID的使用情況,自動生成ContactID和RawContactID。
2.Android原始碼新建重複姓名的聯絡人的ContactID是不重複的,所以會重複顯示。
3.用下面的程式碼新建聯絡人,如果多次新建的聯絡人的姓名是一樣的,生成的ContactID也會重複, RawContactID不會重複,我們在讀取聯絡人的時候可以獲取所有同姓名聯絡人的號碼等資訊,在顯示聯絡人的時候,重複姓名的聯絡人的所有欄位資訊都會合並起來顯示為一個聯絡人。

刪除聯絡人:
非常簡單隻需要將raw_contacts表中指定RawContactID的行刪除,其他表中與之關聯的資料都會自動刪除。

更新聯絡人:
聯絡人的所有資訊都是儲存在data表中,所以要更新聯絡人,我們只需要根據RawContactID和MIMETYPE修改data表中的內容。

——轉自“威哥”