Android Contact 数据结构之AccountType

  1. AccountType介绍

    AccountType是标注一个联系人存储的时候的账户类型, 就是我们在存储联系人时选择存储到什么地方后设置的值,为联系人指定Accounttype主要是为了标识该联系人能够保存哪些数据.  例如说SimAccountType就只能够保存联系人的姓名, 和一项电话号码.

    主要的AccountType有BaseAccountType,SimAccounType,USimAccountType,UimAccountType,GoogleAccountType,ExchangeAccountType。 AccountType是一个抽象类具体的实现是在BaseAccountType中。  BaseAccountType是AccountType的直接子类,而其他的账户类型都继承自BaseAccountType. 

    一个联系人能够保存哪些数据主要由AccountType中的mMimeKinds(ArrayList<DataKind>)变量所决定,这个变量保存了这个AccountType类型的联系人能够存储哪些数据。一个DataKind表示一个MIME类型的支持的所有数据类型。

    所有的MIME类型存在/data/data/com.android.providers.contacts/databases/contacts2.db 数据库中的mimetypes表中。

  2. DataKind介绍

    DataKind能够保存相同MIME类型的子类型,一个DataKind对象对应一个MIME类型。他的一些重要属性:

      • public String mimeType;      //表示该DataKind标识的是那种mime。
      • public int typeOverallMax;   //表示的该DataKind能够在联系人添加时出现几次一般都只是一次 ,-1表示不限制。
      • public List<EditType> typeList;  //表示该DataKind包含的所有EditType类型
      • public List<EditField> fieldList;  //表示该DataKind包含的所有EditField类型(EditType和EditField将在后面进行讲解)
  3. EditType介绍

    EditType是AccountType的一个内部内,表示一个数据类型的数据的一个标签,比如说:PhoneNumber 的 Mobile标签, 一个EditType对应到数据库中就是data表中的一行数据。它的一些重要数据:

      • public int specificMax; //表示一个联系人中该数据类型的该标签最多能够添加多少个,-1表示不限制。
      • public int labelRes;  //表示这个标签的显示名称
      • public int rawValue;  //这个标签的标识,值从framework中的ContactConstract.java中来。
  4. EditField介绍

    EditField同样也是AccountType的一个内部内,表示一个数据类型的字段,比如说:Name 的First name字段,一个EditField对应数据库中就是data表中的一列数据。对应DataKind中一个fieldList对应data表的一行数据。它的一些重要数据:

      • public String column; // 因为在data表中表示为一列数据,所以这个属性就是记录它是放到数据库中的哪一列。
      • public int titleRes; //这个字段在界面上显示为什么
      • public int inputType; //表示输入的类型。

可能这里看这个觉得没什么意义,后面我们会先看看EntityDelta相关的数据结构后再来完整的追一次联系人添加的流程。这样可能会清楚一些。 (分享主要是基于android4.0 版本的代码)

转载于:https://www.cnblogs.com/yadongH/archive/2012/11/23/2784858.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值