1. 程式人生 > >Android原生Contacts——介面和資料庫

Android原生Contacts——介面和資料庫

下面的講解基於AndroidM

整體認識

這裡寫圖片描述
聯絡人應用其主要的功能就是管理手機中儲存的聯絡人資訊,為了更好的管理資訊資料,我們就引入了資料庫,所以對於聯絡人的整體認識,我們就可以將其看成是資料庫,聯絡人的整個業務邏輯都會圍繞資料庫展開。

原始碼路徑和類

android/packages/apps/Dialer
android/packages/apps/Contacts
android/packages/apps/ContactsCommon
android/packages/providers/ContactsProvider
android/packages/providers/CallLogProvider
android/vendor/qcom/proprietary/telephony-apps/SimContacts
data/data/com
.android.dialer/databases/dialer.db data/data/com.android.providers.contacts/databases/contacts2.db data/data/com.android.providers.contacts/databases/profile.db 機主資訊資料庫 ContactsDatabaseHelper.java 資料庫建立類 ContactsProvider2.java 資料庫操作類 ContactContract.java 資料庫定義類

部分UI相關類

這裡寫圖片描述
上圖列出了部分介面相關的類和說明,這裡列出了應用中大部分可以見的activity、fragment和view

主介面

這裡寫圖片描述
上圖是contacts的主介面PeopleActivity,對應顏色的圖形與對應顏色的類名相對應,這裡只對主介面做了簡單介紹,其它的介面讀者可以通過IDE工具或者原始碼去分析。

資料庫

這裡寫圖片描述
這裡寫圖片描述
上圖是對於contacts資料庫的整體截圖,我們可以看到,資料庫中的表有很多,每張表都有不同的作用,我們這裡比較關心的是圖中用紅色矩形框出來的表,從官方給出的介紹圖可以看出,一個contact對應多個row contact,一個row contact 對應多個data。

各個表中對應資料的含義

contacts表

  • name_raw_contact_id:對應raw_contacts表中的id,即介面顯示的contact
  • photo_id:模糊大頭貼id
  • photo_file_id:清晰大頭貼id
  • custom_ringtone:個人鈴聲
  • send_to_voicemail:來電轉接語音信箱(0 false,1 true)
  • times_contacted:聯絡人聯絡次數
  • last_time_contacted:最近一次聯絡的時間
  • starred:是否收藏
  • pinned:是否被固定
  • has_phone_number:是否有號碼(至少一個)
  • lookup:查詢此聯絡人的key值
  • contact_last_updated_timestamp:聯絡人最後修改時間

raw_contacts表

  • account_id:記錄所屬賬戶id
  • sourceid:資料來源id
  • backupid:資料備份時產生的id
  • raw_contact_is_read_only:是否只讀(1只讀,0可刪除)M中沒用
  • version:資料傳送變化時改變
  • dirty: version變化,值為1,需同步資料
  • deleted:標記是否為刪除的記錄
  • contact_id:對應contacts表中的id
  • aggregation_mode:標記是否需要合併(default:0?immediate:1 suspended:2 disabled:3 )
  • aggregation_needed:是否需要合併(1需要,0不需要)
  • custom_rington:與該記錄相關的手機鈴聲
  • send_to_voicemail:來電轉接語音信箱
  • times_contacted:與該聯絡人聯絡的次數
  • last_time_connected:最近一次聯絡時間
  • starred:是否收藏(1收藏,0沒收藏)
  • pinned:是否被固定
  • display_name:聯絡人顯示名稱
  • display_name_alt:聯絡人顯示名稱的替代表示(如西方名字“名在前”)
  • display_name_source:名字顯示資料型別:email、phone、name
  • phonetic_name: 發音名字
  • phonetic_name_style:名字不同發音風格(undefined=0,pinyin=3,japanese=4,korean=5)
  • sort_key:排序欄位
  • phonebook_label:首字母
  • phonebook_bucket:對應首字母的排序
  • sync1、2、3、4:同步相關,儲存uri,同步狀態,伺服器版本,錯誤程式碼等等

data表

  • mimetype_id:資料型別id,對應mimetypes表
  • raw_contact_id:對應raw_contact的id
  • is_primary,is_super_primay:是否為預設號碼
  • data_version:此資料記錄的版本,每當資料行更改版本上升,此值單調遞增
  • data1-data15 :同類資料的不同形式的表達方式
  • carrier_presence:載波資訊
  • -

accounts表

儲存當前聯絡人有哪些賬戶資訊,比如:SIM、Google、localphone等等。

calls表

記錄了dialer裡面的通話資訊,包括:通話時間,號碼,次數,型別,等等。

mimetypes表

裡面記錄了資料庫中所有資料的型別。

其它

還有一些相關的view,比如:view_contacts、view_data、view_row_contacts等等,這些檢視包含了上面的多個表的資料,一般的查詢操作都是對view的操作。

一個聯絡人資訊

這裡寫圖片描述
這裡寫圖片描述

Dialer&Contacts整體圖

這裡寫圖片描述