Chr*_*ser 5 android calendar sync android-contentprovider
我想在内部 Android 日历和我的应用程序之间进行同步。我正在使用从 Android API 14 开始提供的 CalendarContract。
内容提供程序“com.android.calendar”的任何更改都会调用我的同步适配器的 onPerformSync(..)。但是,此时,事件的所有行都设置为 DIRTY = 0。这意味着,在我的同步适配器可以访问它们之前,Google 日历同步必须将 DIRTY FLAG 设置为零。
CalendarContract.EventsColumns.SYNC_DATA1 - SYNCDATA10 被认为是用于同步适配器的内容提供者的列。有人知道这些列的用途是否有一些约定?我意识到在我的设备上 SYNC_DATA5 存储了上次修改的日期,而 SYNC_DATA1 似乎存储了 Google 事件 ID。因此,似乎每当日历应用程序与 Google 日历同步时,这些列都会被修改。
但是,如果我选择为我的同步适配器使用这些列之一,我如何确保另一个应用程序不使用相同的列并且它们相互覆盖?
如果 Google 日历始终使用 SYNC_DATA5 来存储上次修改的日期,我只需将其用于同步逻辑就可以了,我只需要确定这是一个约定。
这些SYNC_DATA列可用于任何值。我不确定谷歌日历是如何做到这一点的,但它们适用于与同步适配器相关的内容,不同步日历的应用程序不得使用它们。因此,您可以安全地使用任何列(前提是您不会在应用程序版本之间更改它,否则您必须编写迁移代码),因为您的日历上不应该有任何其他同步适配器在工作。
SYNC_DATA当不是同步适配器时,您不能依赖这些列,当日历不是“您的”时,请勿使用它们。
但是,我强烈感觉您没有正确同步。要同步日历,您必须使用单独的日历,而不是由 Google 或任何其他第三方应用程序同步的任何日历。我还将列出我认为您执行过的其他一些步骤,但可能对其他人有帮助。
您还需要将一些参数附加到您对系统的任何请求中,以便您可以访问同步适配器字段。AbstractThreadedSyncAdapter此外,您应该仅从实现同步您的日历。为此,您还需要提供一个身份验证器(如果您还没有)(以便用户能够在帐户的同步首选项中启用/禁用您的同步适配器)。有关同步适配器的概述可以在这篇博客文章中找到。
如果您没有服务器端帐户并且只有一个日历,则第一次启动时需要执行一些操作:
之后,Android 将不时执行您的同步适配器,您可以访问列SYNC_DATA而不会发生冲突(在您创建的日历中),并且DIRTY标志可以正确提供。
| 归档时间: |
|
| 查看次数: |
2422 次 |
| 最近记录: |