1. 程式人生 > >Android 聯絡人資料庫contacts2.db介紹

Android 聯絡人資料庫contacts2.db介紹

技術要點一:熟悉Android聯絡人資料庫contacts2.db

1.獲得聯絡人資料庫contacts2.db檔案

步驟一、開啟Eclipse並且執行模擬器;

步驟二、調出檔案瀏覽器File Explorer(從工具欄中依次開啟Windows—>Show View -> Other -> Android - > File Explorer),如圖所示:


步驟三、開啟檔案瀏覽器,並在此目錄data->data->com.android.providers.contacts->databases下,找到資料庫:contacts2.db,注意:如果是想匯出真機上的contacts2.db資料庫,真機必須是經過root以後才能匯出,否則在data目錄層就打不開。


步驟四、選中contacts2.db,並且在File Explorer的右上角,選擇匯出鍵,將contacts2.db資料庫匯入到電腦上。


步驟五、下載資料庫視覺化軟體,用來幫我們開啟contacts2.db,檢視其中的表結構,這裡我推薦使用sqlitestudio,附上下載連結:連結地址

步驟六、安裝sqlitestudio,安裝成功後,開啟軟體並匯入contacts2.db資料庫


步驟七、雙擊Contacts2資料庫,就能看到Contacts2.db裡面所有的表

步驟九、雙擊data表,查看錶的結構


步驟十、點選工具欄上方的資料,就可以查看錶中的內容


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、電話號碼等。

相關推薦

Android 聯絡人資料庫contacts2.db介紹

技術要點一:熟悉Android聯絡人資料庫contacts2.db 1.獲得聯絡人資料庫contacts2.db檔案 步驟一、開啟Eclipse並且執行模擬器; 步驟二、調出檔案瀏覽器File Explorer(從工具欄中依次開啟Windows—>Show View -> Other ->

Android 聯絡人資料庫介紹以及對聯絡人的基本操作

一、 聯絡人資料庫 聯絡人的資料庫檔案的位置 /data/data/com.Android.providers.contacts/databases.contacts2.db 資料庫中重要的幾張表 1、contacts表 該表儲存了所有的手

Android 聯絡人資料庫表詳解

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

Android聯絡人資料庫讀取

  android讀取聯絡人是通過contentprovider的介面形式來進行的,而且聯絡人操作屬於高危級別的行為,因此需要做許可權申請: <uses-permission android:name="android.permission.READ_C

【轉】Android動態破解微信本地資料庫(EnMicroMsg.db)

最近在公司接了一個任務,需要在幾百臺手機上安裝一個app,目的是獲取微信裡面的通訊錄,並且定時的把他傳送到我們的伺服器上。當時依次嘗試的如下幾個方案:   1.通過群控,將好友截圖傳送到服務端(python),利用python的影象識別庫來獲取好友的資訊。   2.開發一個app,使用

Android 官方架構元件--ROOM 資料庫操作簡單介紹

本文只是簡單的介紹一下怎麼在我們的專案中使用ROOM和一個簡單的小例子。                ROOM是Google官方推出的一個永續性資料庫,Room永續性庫提供了SQLite的抽象層,以便在充分利用SQLite的同時允許流暢的資料庫訪問。        RO

聯絡人Contacts中資料庫contacts.db簡要分析

在Contacts中,contacts2.db資料庫位於/data/data/com.android.providers.contacts/databases裡,contacts2.db中有很多張表,下面主要看下幾張重要的表 裡面定義了contact2.db資料裡表名和檢

關於android 聯絡人,簡訊,電話記錄,需要的uri,資料庫中獲取的小結,請看註釋

關於android 聯絡人,簡訊,電話記錄,需要的uri,資料庫中獲取的小結 // 簡訊會話Uri public static final Uri CONVERSATION_URI = Uri.parse(“content://mms-sms/convers

Android開發 SQLite 通過.db檔案匯入已有資料庫

那,如果想要用一個已有的資料庫怎麼辦? 因為Android系統下的資料庫是存放在/data/data/com.*.*(package name)/目錄下,所以我們可以這樣:1.將.db檔案放到專案原始碼的res/raw目錄下; 2.用FileInputStream讀取原資料; 3.用FileOutPutSt

開源項目Universal Image Loader for Android 說明文檔 (1) 簡單介紹

bst 成功 開源 ica ctu structure 使用 說明 由於  When developing applications for Android, one often facesthe problem of displa

android mvp高速開發框架介紹(dileber的簡單介紹

activity 數據 -c pos androi mod family 基於 ebe 今天我為大家介紹一款android mvp框架:dileber(https://github.com/dileber/dileber.git) 官方交流qq群:171443

Android 安卓系統架構介紹

圖片 img 多核心 nco 安全性 .com not 狀態 linux android系統架構 從上圖中可以看出,Android系統架構為四層結構,從上層到下層分別是應用程序層、應用程序框架層、系統運行庫層以及Linux內核層,分別介紹如下:

android mvp高速開發框架介紹(dileber使用之圖片下載工具)

net com 例如 下載 pop bug span 介紹 launcher 這幾天忙著工作~ 今天抽時間又把框架的bug處理了一下~~並且把volley的源代碼改

Android開發智能車載App(1)---android控件及屬性介紹

ica let apc 文本框 tco 內邊距 inpu otto 小數 1.展示文本控件 TextView 屬性名稱 描述 android:text 設置顯示文本. android:te

Android官方架構組件介紹之LifeCycle(一)

mave 工程 視圖 平時 清理 star new 內部 serve Android官方架構組件介紹之LifeCycle 下面是官方提供的Android App開發的架構圖: 從上圖可以看到一些關鍵字:ViewModel,LiveData,Room等。其實看了上面視頻的

Android官方架構組件介紹之ViewModel(三)

gets use 時間管理 src context per and 發生 方法 ViewModel 像Activity,Fragment這類應用組件都有自己的生命周期並且是被Android的Framework所管理的。Framework可能會根據用戶的一些操作和設備的狀態對

Android官方架構組件介紹之應用(四)

怎麽 nbsp 註冊 bool 其他 info get inf prot 講一個項目常見的功能,友盟統計功能 例如一個項目有很多多modlue,每個裏面modlue都有Activity,Activity需要友盟統一,Fragment也需要友盟統計。一般做法就是繼承一個Bas

Android手機直播系統開發介紹

fff 較差 參數調整 直播間 dia type -h vpd 分辨率 近兩年直播熱的興起也帶動了直播開發行業的崛起,每個人都想要去吃直播開發這塊蛋糕。但這塊蛋糕也不是這麽容易吃到的,在激烈的市場競爭下,有幾個大的直播平臺始終占據著市場中較大的份額,也有一些小的公司承受不住

Android開發——資料庫框架Suger遇到的大坑(依據列名查詢不到資料解決辦法)

Android開發——資料庫框架Suger遇到的大坑(依據列名查詢不到資料解決辦法) JavaBean命名出現大寫,資料無法正常儲存(用的是Suger第二種操作方式,第一種沒有測試) 習慣中對Bean中變數的命名會出現大寫字母,但使用Suger操作這樣的資料會出現問題,比如我這樣命名

Android開發——資料庫框架Suger遇到的大坑(Gson和Suger的複用Bean請見“大坑三”)

Android開發——資料庫框架Suger遇到的大坑(Gson和Suger的複用Bean請見“大坑三”) 大坑一 自己寫了一個Demo按照官網以及GitHub上Suger的使用步驟完整走下來,Demo閃退,以插入資料為例 User user = new User("liao",