一、 聯絡人資料庫
聯絡人的資料庫檔案的位置
/data/data/com.android.providers.contacts/databases.contacts2.db
資料庫中重要的幾張表
1、contacts表
該錶儲存了所有的手機測聯絡人,每個聯絡人佔一行,該錶儲存了聯絡人的
contactid、聯絡次數、最後一次聯絡的時間、是否含有號碼、是否被新增
到收藏夾等資訊。
2、raw_contacts表
該錶儲存了所有建立過的手機測聯絡人,每個聯絡人佔一行,表裡有一列標
識該聯絡人是否被刪除,該錶儲存了兩個id:rawcontactid和contactid,
從而將contacts表和raw_contacts表聯絡起來。該錶儲存了聯絡人的
rawcontactid、contactid、聯絡次數、最後一次聯絡的時間、是否被添
加到收藏夾、顯示的名字、用於排序的漢語拼音等資訊。
3、 mimetypes
該錶定義了所有的mimetypeid,即聯絡人的各個欄位的唯一標誌。
4、data表
該錶儲存了所有建立過的手機測聯絡人的所有資訊,每個欄位佔一行 ,該錶
儲存了兩個id:mimetypeid和rawcontactid,從而將data表和
raw_contacts表聯絡起來。
聯絡人的所有資訊儲存在列data1至data15中,各列中儲存的內容根據
mimetypeid的不同而不同。如儲存號碼(mimetypeid=5)的那行資料中,
data1列儲存號碼,data2列儲存號碼型別(手機號碼/家庭號碼/工作號碼等)。
二、對聯絡人的基本操作
這裡的基本操作只是針對手機測的聯絡人,(u)sim側的聯絡人的操
作後續介紹。
如果對聯絡人的基本操作,我們必須得到許可。
方法就是在androidmanifest.xml檔案中配置如下許可權:
讀取聯絡人
分為以下步驟:
1、先讀取contacts表,獲取contactsid;
2、再在raw_contacts表中根據contactsid獲取rawcontactsid;
3、然後就可以在data表中根據rawcontactsid獲取該聯絡人的各資料了。
[html]view plain
copy
// 獲取用來運算元據的類的物件,對聯絡人的基本操作都是使用這個物件
contentresolver cr
= getcontentresolver
();
// 查詢contacts表的所有記錄
cursor cur
= cr
.query(contactscontract.contacts.content_uri, null, null,
null, null);
// 如果記錄不為空
if (cur.getcount() >
0)
, null);
// 該查詢結果一般只返回一條記錄,所以我們直接讓游標指向第一條記錄
if (rawcontactsidcur.movetofirst())
rawcontactsidcur.close();
[html]view plain
copy
// 讀取號碼
if (integer.parseint(cur.getstring(cur.getcolumnindex(contactscontract.
contacts.has_phone_number))) >
0)
, null);
// 上面的contactscontract.commondatakinds.phone.content_uri
// 可以用下面的phoneuri代替
// uri phoneuri
=uri
.parse("content:");二、對聯絡人的基本操作(6)
// 乙個聯絡人可能有多個號碼,需要遍歷
while (phonecur.movetonext())
phonecur.close();
新建聯絡人
新建聯絡人時, 根據contacts、raw_ contacts兩張表中id的使用情況,自動
生成contactid和rawcontactid。
android原始碼新建重複姓名的聯絡人的contactid是不重複的,所以會重複顯
示。用下面的**新建聯絡人,如果多次新建的聯絡人的姓名是一樣的,生成的
contactid也會重複,rawcontactid不會重複,我們在讀取聯絡人的時候可
以獲取所有同姓名聯絡人的號碼等資訊,在顯示聯絡人的時候,重複姓名的
聯絡人的所有字段資訊都會合併起來顯示為乙個聯絡人。
[html]view plain
copy
contentvalues
values
= new
contentvalues();
uri rawcontacturi
=
getcontentresolver
().insert(rawcontacts.content_uri, values);
long rawcontactid
= contenturis
.parseid(rawcontacturi);二、對聯絡人的基本操作(8)
// 向data表插入姓名資料
if (name != "")
// 向data表插入**資料
if (phonenum != "")
刪除聯絡人
android幫助文件:when a raw contact is deleted, all of its data rows as
well as statusupdates, aggregationexceptions, phonelookup rows are
deleted automatically.
所以,要刪除聯絡人,我們只需要將raw_contacts表中指定rawcontactid的
行刪除,其他表中與之關聯的資料都會自動刪除。
[html]view plain
copy
public void delete(long rawcontactid)
更新聯絡人
聯絡人的所有資訊都是儲存在data表中,所以要更新聯絡人,我們只需要根
據rawcontactid和mimetype修改data表中的內容。
[html]view plain
copy
contentvalues
values
= new
contentvalues();
values.put(phone.number, 「123");
values.put(phone.type, phone.type_mobile);
string where
= contactscontract
.data.raw_contact_id + " = ? and
" + contactscontract.data.mimetype + " = ?";
string whereparams
= new
string;
getcontentresolver().update(contactscontract.data.content_uri,
values, where, whereparams);
Android操作聯絡人
android系統中的聯絡人也是通過contentprovider來對外提供資料的,我們這裡實現獲取所有聯絡人 通過 號碼獲取聯絡人 新增聯絡人 使用事務新增聯絡人。獲取所有聯絡人 1.android系統中的聯絡人也是通過contentprovider來對外提供資料的 2.資料庫路徑為 data d...
android 聯絡人詳解
操作聯絡人工程需要許可權,不然會報錯。android聯絡人是用資料庫儲存的,資料庫結構如下 raw contacts表 主要儲存了每個聯絡個的唯一表示欄位 id欄位。data表 raw contact id就是raw contacts中的 id欄位,所有raw contact id值相同的都是 同乙...
Android聯絡人讀取操作筆記
android中的聯絡人都儲存在乙個sqlite資料庫中,有興趣的可以使用adb直接push出來看一下裡面的表和檢視的結構,它的路徑為 data data com.android.providers.contacts databases contacts2.db 在聯絡人資料庫中,儲存的都是一些小的...