Android操作聯絡人

2021-07-10 14:46:25 字數 4146 閱讀 8355

一、 聯絡人資料庫

 聯絡人的資料庫檔案的位置

/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 在聯絡人資料庫中,儲存的都是一些小的...