Android原生Contacts——介面和資料庫
阿新 • • 發佈:2019-02-19
下面的講解基於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的操作。
一個聯絡人資訊