Android日历提供程序同步-同步数据列?

Android日历提供程序同步-同步数据列?,android,calendar,sync,android-contentprovider,Android,Calendar,Sync,Android Contentprovider,我想在内部Android日历和我的应用程序之间进行同步。 我正在使用从Android API 14开始提供的CalendarContract 内容提供商“com.android.calendar”的任何更改都会调用我的同步适配器的PerformSync(..)。 但是,此时,事件的所有行都设置为DIRTY=0。 这意味着,Google日历同步必须先将脏标志设置为零,然后我的同步适配器才能访问它们 CalendarContract.EventsColumns.SYNC_DATA1-SYNCDATA

我想在内部Android日历和我的应用程序之间进行同步。 我正在使用从Android API 14开始提供的CalendarContract

内容提供商“com.android.calendar”的任何更改都会调用我的同步适配器的PerformSync(..)。 但是,此时,事件的所有行都设置为DIRTY=0。 这意味着,Google日历同步必须先将脏标志设置为零,然后我的同步适配器才能访问它们

CalendarContract.EventsColumns.SYNC_DATA1-SYNCDATA10被称为内容提供程序的列,用于同步适配器。 有人知道这些列的用途有什么约定吗? 我意识到,在我的设备上,SYNC_DATA5存储上次修改的日期,SYNC_DATA1似乎存储谷歌事件ID。因此,每当日历应用程序与谷歌日历同步时,这些列都会被修改

但是,如果我选择将这些列中的一列用于我的同步适配器,如何确保另一个应用程序不使用完全相同的列,并且它们相互覆盖


如果Google Calendar总是使用SYNC_DATA5来存储上次修改的日期,我可以将其用于我的同步逻辑,我只需要确定这是一种约定。

SYNC_DATA列可以用于任何值。我不确定谷歌日历是如何做到这一点的,但它们是用于与同步适配器相关的内容的,不同步日历的应用程序不得使用它们。因此,您可以安全地使用任何列(假设您不在应用程序的不同版本之间更改它,或者您必须编写迁移代码),因为您的日历上不应该有任何其他同步适配器

当不是同步适配器时,您不能依赖
SYNC\u DATA
列,当日历不是“您的”时,请勿使用它们


然而,我有一种强烈的感觉,你没有正确同步。要同步日历,您必须使用单独的日历,而不是谷歌或任何其他第三方应用程序同步的任何日历。我还将列出一些我认为您执行的其他步骤,但可能对其他人有所帮助

您还需要为系统设置一个同步适配器,以便访问同步适配器字段。此外,您还应仅从一台计算机同步日历。为此,如果还没有验证器,您还需要提供验证器(以便用户能够在帐户的同步首选项中启用/禁用您的同步适配器)。可以找到有关同步适配器的概述

如果您没有服务器端帐户,并且只有一个日历,则在首次启动时需要执行一些操作:

  • 创建帐户
  • 创建绑定到该帐户的日历
  • 启用同步适配器

  • 在此之后,Android将负责不时执行您的同步适配器,您可以访问
    sync_DATA
    列而不会发生冲突(在您创建的日历中),并且
    DIRTY
    标志被正确使用。

    我能问一下您提到的同步逻辑是什么吗?如何将SYNC_DATA5用于同步逻辑?