Android原生Contacts——界面和数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/michael_yt/article/details/52650282

下面的讲解基于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整体图

这里写图片描述

阅读更多

扫码向博主提问

Yigit_dev

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • android
  • tensorflow
去开通我的Chat快问

没有更多推荐了,返回首页