android developer tiny share-20170708

来源:互联网 发布:程序员经典面试题目 编辑:程序博客网 时间:2024/06/01 07:54

今天继续讲android的Contact ContentProvider,讲联系人的元数据,这些元数据分布在各个表的某些列里,今天讲几个比较重要的。

以下是android developer官方讲解:



联系人提供程序元数据


联系人提供程序管理用于追踪存储区中联系人数据状态的数据。 这些有关存储区的元数据存储在各处,其中包括原始联系人表行、数据表行和联系人表行、 ContactsContract.Settings 表以及 ContactsContract.SyncState 表。 下表显示的是每一部分元数据的作用:

表 3. 联系人提供程序中的元数据

表列值含义ContactsContract.RawContactsDIRTY“0”:上次同步以来未发生变化。
“1”:上次同步以来发生了变化,需要同步回服务器。标记设备上因发生变化而需要同步回服务器的原始联系人。 当 Android 应用更新行时,联系人提供程序会自动设置该值。
修改原始联系人表或数据表的同步适配器应始终向他们使用的内容 URI 追加字符串 CALLER_IS_SYNCADAPTER。 这可以防止提供程序将行标记为已更新。 否则,即使服务器是修改的来源,同步适配器修改仍显示为本地修改,并会发送到服务器。ContactsContract.RawContactsVERSION此行的版本号。每当行或其相关数据发生变化时,联系人提供程序都会自动增加此值。ContactsContract.DataDATA_VERSION此行的版本号。每当数据行发生变化时,联系人提供程序都会自动增加此值。ContactsContract.RawContactsSOURCE_ID一个字符串值,用于在创建此原始联系人的帐户中对该联系人进行唯一标识。当同步适配器创建新原始联系人时,此列应设置为该原始联系人在服务器中的唯一 ID。 当 Android 应用创建新原始联系人时,应将此列留空。 这是为了向同步适配器表明,它应该在服务器上创建新原始联系人,并获取 SOURCE_ID 的值。
具体地讲,对于每个帐户类型,该源 ID 都必须是唯一的,并且应在所有同步中保持稳定:

  • 唯一:帐户的每个原始联系人都必须有自己的源 ID。如果您不强制执行此要求,会在联系人应用中引发问题。 请注意,帐户类型相同的两个原始联系人可以具有相同的源 ID。 例如,允许帐户 emily.dickinson@gmail.com 的原始联系人“Thomas Higginson”与帐户 emilyd@gmail.com 的原始联系人“Thomas Higginson”具有相同的源 ID。
  • 稳定:源 ID 是该原始联系人在在线服务中的数据的永久性组成部分。 例如,如果用户从应用设置中清除存储的联系人数据并重新同步,则恢复的原始联系人的源 ID 应与以前相同。 如果您不强制执行此要求,快捷方式将停止工作。
ContactsContract.GroupsGROUP_VISIBLE“0”:此组中的联系人在 Android 应用 UI 中不应处于可见状态。
“1”:系统允许此组中的联系人在应用 UI 中处于可见状态。此列用于兼容那些允许用户隐藏特定组中联系人的服务器。ContactsContract.SettingsUNGROUPED_VISIBLE“0”:对于此帐户和帐户类型,未归入组的联系人在 Android 应用 UI 中处于不可见状态。
“1”:对于此帐户和帐户类型,未归入组的联系人在应用 UI 中处于可见状态。默认情况下,如果联系人的所有原始联系人都未归入组,则它们将处于不可见状态(原始联系人的组成员身份通过 ContactsContract.Data 表中的一个或多个 ContactsContract.CommonDataKinds.GroupMembership 行指示)。 通过在 ContactsContract.Settings 表行中为帐户类型和帐户设置此标志,您可以强制未归入组的联系人处于可见状态。 此标志的一个用途是显示不使用组的服务器上的联系人。ContactsContract.SyncState(all)此表用于存储同步适配器的元数据。利用此表,您可以将同步状态及其他同步相关数据持久地存储在设备中。