到顶部
Android API
公众的静态最终的

联系人合同。数据

延伸对象
机具联系人合同。数据列与联接
java.lang.Object(java.lang.对象)
   ↳ android.provider。联系人合同。数据

课程概述

数据表的常量,其中包含绑定到原始联系人。数据表的每一行通常用于存储单个接触件信息(如电话号码)及其关联的元数据(例如它是工作号码还是家庭号码)。

数据类型

数据是一个通用表,可以保存任何类型的联系人数据。存储在给定行中的数据类型由行的MIMETYPE公司值,它决定常规列数据A1通过数据15.例如,如果数据类型为电话。目录_ TEM_TYPE,然后是列数据A1存储电话号码,但如果数据类型是电子邮件。目录_ TEM_TYPE,然后数据A1存储电子邮件地址。同步适配器和应用程序可以引入自己的数据类型。

ContactsContract定义了少量预定义的数据类型,例如。联系人合同。通用数据种类。电话联系人合同。通用数据种类。电子邮件等作为这些类为DATA1等定义了特定于数据类型的别名,非常方便。例如,电话。编号与相同数据。数据A1.

数据A1是索引列,应用于预期在查询选择中使用最频繁。例如,在表示电子邮件地址的行大小写数据A1应该很可能用于电子邮件地址本身,而数据A2等可以是用于电子邮件地址类型等辅助信息。

按照惯例,数据15用于存储BLOB(二进制数据)。

给定帐户类型的同步适配器必须正确处理每种数据类型用于相应的原始触点。否则可能导致丢失或损坏的数据。

同样,您应该避免为其他人引入新类型的数据参与方的帐户类型。例如,如果为添加数据行谷歌账户拥有的原始联系人的“最喜欢的歌曲”,不会同步到服务器,因为Google同步适配器不知道如何处理这种数据类型。因此,新的数据类型通常是引入了新的帐户类型,即新的同步适配器。

批处理操作

可以使用传统的插入(Uri,ContentValues)更新(Uri,ContentValues,String,String[])delete(Uri,String,String[])方法,但基于更新的机制在一批内容提供者操作将证明是更好的几乎在所有情况下都有选择。批处理中的所有操作都在单个事务,确保电话端和服务器端原始触点的状态总是一致的。此外,基于批处理的这种方法要有效得多:不仅是数据库操作在单个事务中执行时速度更快,但也可以发送一批向内容提供者发送命令可以节省大量上下文切换时间在您的进程和内容提供程序运行的进程之间。

使用批处理操作的另一方面是,大批处理可能会锁定长时间关闭数据库,防止其他应用程序访问数据并可能导致ANR(“应用程序没有响应”)对话框。)

为了避免数据库被锁定,请确保插入“屈服点”在批次中。屈服点向内容提供商指示执行下一个操作可以提交已经发生的更改已发出,屈服于其他请求,打开另一个事务并继续处理操作。屈服点不会自动提交事务,但仅当有另一个请求等待数据库。通常,同步适配器应在批次中每个原始接触操作序列的开始。请参阅允许产量(布尔值).

操作

插入

可以使用传统的插入(Uri,ContentValues)方法。多行应始终作为批插入。

传统插件示例:

ContentValues值=新ContentValues();values.put(Data.RAW_CONTACT_ID,rawContactId);values.put(Data.MMETYPE,Phone.CONTENT_ITEM_TYPE);values.put(电话号码,“1-800-GOOG-411”);values.put(Phone.TYPE,Phone.TypeE_CUSTOM);values.put(Phone.LABEL,“免费目录帮助”);Uri数据Uri=getContentResolver().insert(Data.CONTENT_Uri,values);

使用ContentProviderOperations也是如此:

阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(数据.RAW_CONTACT_ID,原始联系人ID).withValue(数据.MMETYPE,电话.CONTENT_ITEM_TYPE).withValue(电话号码,“1-800-GOOG-411”).withValue(电话.TYPE,电话.TYPE_CUSTOM).withValue(电话.LABEL,“免费目录帮助”).build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);

更新

与插入一样,更新可以增量完成,也可以成批完成,批处理模式是首选方法:

阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(Data.ID+“=?”,新字符串[]{String.valueOf(dataId)}).withValue(电子邮件.DATA,“somebody@android.com").build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);

删除

就像插入和更新一样,可以使用delete(Uri,String,String[])方法或使用ContentProviderOperation:

阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI).withSelection(Data.ID+“=?”,新字符串[]{String.valueOf(dataId)}).build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);

查询

查找给定联系人的给定类型的所有数据
光标c=getContentResolver().query(Data.CONTENT_URI,new String[]{数据_ID,电话号码,电话类型,电话标签},数据。CONTACT_ID+“=?”+“AND”+数据。MIMETYPE+“='”+电话。CONTENT_ITEM_TYPE+“”,new String[]{String.valueOf(contactId)},null);

查找给定原始联系人的给定类型的所有数据
光标c=getContentResolver().query(Data.CONTENT_URI,new String[]{数据_ID,电话号码,电话类型,电话标签},数据。原始联系人ID+“=?”+“AND”+数据。MIMETYPE+“='”+电话。CONTENT_ITEM_TYPE+“”,new String[]{String.valueOf(rawContactId)},null);
查找给定原始联系人的所有数据
大多数同步适配器都希望读取原始联系人的所有数据行以及原始接触本身。为此,您应该使用联系人合同。原始联系人实体。另请参阅联系人合同。原始联系人.

许多列通过内容_ URI查询。为了您的最佳表现应该显式地指定只对您需要的那些列的投影。

数据
长的 _身份证 只读 行ID。同步适配器应在更新期间尝试保留行ID。换句话说,删除并重新插入数据行不是一个好主意。同步适配器应始终进行更新。
字符串 MIMETYPE公司 读/写一次

此行表示的项的MIME类型。常见示例MIME类型包括:

长的 原始合同ID 读/写一次 中的行id联系人合同。原始联系人此数据所属的表。
整数 IS_主要 读/写 这是否是其所属原始触点的主要条目。如果为true,则为“1”;如果为false,则为0。
整数 IS_上游_主要 读/写 这是否是骨料的主要分录联系人。任何“超级主”数据记录必须也是“主要”。例如,超级主条目可以是解释为其类型的默认接触值(例如,联系人使用的默认电话号码)。
整数 数据版本 只读 此数据记录的版本。每当数据行更改时版本升级了。该值单调递增。
任何类型 数据A1
数据A2
数据3
数据4
数据5
数据A6
数据7
数据A8
数据A9
数据A10
数据11
数据12
数据13
数据14
数据15
读/写

通用数据列。每列的含义由MIMETYPE公司根据惯例,数据15用于存储BLOB(二进制数据)。

没有为给定MIMETYPE显式定义其含义的数据列不应使用。无法保证任何同步适配器都会保存它们。同步适配器本身也不应使用此类列,但应该改用同步1-同步4.

任何类型 同步1
同步2
同步3
同步4
读/写 供同步适配器使用的通用列。例如,照片行可以将图像URL存储在SYNC1中,状态(未加载、正在加载、已加载、错误)SYNC2中的服务器端版本号和SYNC4中的错误代码。

最近关联状态更新中的一些列也可用通过隐式联接。

加入联系人合同。状态更新
整数 出席 只读 链接到此数据行的即时消息状态。与进行比较联系人姓名,其中包含联系人在所有IM行。请参阅联系人合同。状态更新用于个人状态定义。提供者可以选择不存储此值在持久存储中。预期到场状态将定期更新。
字符串 状态 只读 与此数据行链接的最新状态更新。
长的 状态_时间戳 只读 最新状态为已插入/更新此数据行。
字符串 状态_重置_包装 只读 包含此状态资源的包:标签和图标。
长的 状态_标签 只读 描述链接状态更新源的标签的资源ID到此数据行。此资源的范围由状态_重置_包装.
长的 状态_图标 只读 链接的状态更新源的图标的资源ID到此数据行。此资源的范围由状态_重置_包装.

关联原始联系人中的一些列也可以通过隐式联接。其他列在此中被排除在外,因为它们不感兴趣上下文。

加入联系人合同。原始联系人
长的 联系人ID 只读 中的行id联系人此数据所属的表至。
整数 聚合_模式 只读 请参阅联系人合同。原始联系人.
整数 删除 只读 请参阅联系人合同。原始联系人.

关联的聚合联系人表的ID列联系人合同。联系人可用通过隐式联接联系人合同。原始联系人表,参见上文。此表中的其余列还包括可用,通过隐式联接。这个方便查找单个数据元素的值,例如电子邮件地址。

加入联系人合同。联系人
字符串 LOOKUP_键 只读 请参阅联系人合同。联系人
字符串 显示_名称 只读 请参阅联系人合同。联系人
长的 照片_ID 只读 请参阅联系人合同。联系人.
整数 IN_VISIBLE_组 只读 请参阅联系人合同。联系人.
整数 HAS_电话_号码 只读 请参阅联系人合同。联系人.
整数 时间_已连接 只读 请参阅联系人合同。联系人.
长的 上次联系时间 只读 请参阅联系人合同。联系人.
整数 已启动 只读 请参阅联系人合同。联系人.
字符串 自定义RINGTONE 只读 请参阅联系人合同。联系人.
整数 发送给发票 只读 请参阅联系人合同。联系人.
整数 联系人姓名 只读 请参阅联系人合同。联系人.
字符串 联系人_状态 只读 请参阅联系人合同。联系人.
长的 联系人状态时间戳 只读 请参阅联系人合同。联系人.
字符串 联系人状态_ RES_包装 只读 请参阅联系人合同。联系人.
长的 联系人_状态_标签 只读 请参阅联系人合同。联系人.
长的 联系人_状态_ICON 只读 请参阅联系人合同。联系人.

总结

常量
字符串 内容类型 来自的结果的MIME类型内容_ URI.
字符串 可见_仅联系人 的布尔参数内容_ URI.
[展开]
继承的常量
来自接口android.provider。基础列
来自接口android.provider。联系人合同。联系人姓名列
来自接口android.provider。联系人合同。联系人选项列
来自接口android.provider。联系人合同。联系人状态列
来自接口android.provider。联系人合同。联系人栏
来自接口android.provider。联系人合同。数据列
来自接口android.provider。联系人合同。数据使用状态列
来自接口android.provider。联系人合同。原始联系人列
来自接口android.provider。联系人合同。状态列
领域
公众的静止的最终的乌里 内容_ URI 此表的content://样式URI,它请求一个目录符合选择条件的数据行数。
公共方法
静止的乌里 获取联系人查找URI(内容解析器分解器,乌里数据URI)

构建内容_图书_ URI风格乌里对于家长联系人合同。联系人给定项的条目联系人合同。数据条目。

[展开]
继承的方法
来自班级java.lang.Object(java.lang.对象)

常量

公众静态最终的字符串 内容类型

已在中添加API级别5

来自的结果的MIME类型内容_ URI.

常量值: “vnd.android.cursor.dir/data”

公众静态最终的字符串 可见_仅联系人

已在中添加API等级18

的布尔参数内容_ URI.这指定是否应筛选返回的数据项以显示仅属于可见联系人的数据项。

常量值: “visible_contacts_only”

领域

公众静态最终的乌里 内容_ URI

已在中添加API级别5

此表的content://样式URI,它请求一个目录符合选择条件的数据行数。

公共方法

公众静止的乌里 获取联系人查找URI (内容解析器分解器,乌里数据URI)

已在中添加API级别5

构建内容_图书_ URI风格乌里对于家长联系人合同。联系人给定项的条目联系人合同。数据条目。

在返回的第一个条目中返回联系人的Uri查询(Uri,String[],String,String[],String])对于提供的数据URI。如果查询返回null或空results,默认返回null。