【问题标题】:Android Calendar Provider Sync - SYNC_DATA columns?Android 日历提供程序同步 - SYNC_DATA 列?
【发布时间】:2012-11-12 13:48:49
【问题描述】:

我想在内部 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_DATA5 用于同步逻辑?

标签: android calendar sync android-contentprovider


【解决方案1】:

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

当你不是同步适配器时,你不能依赖SYNC_DATA 列,当日历不是“你的”时不要使用它们。


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

您还需要为系统发送append some parameters to any of your requests,以便访问同步适配器字段。此外,您应该只从AbstractThreadedSyncAdapter implementation 同步您的日历。为此,如果您还没有验证器,您还需要提供验证器(因此用户将能够在帐户的同步首选项中启用/禁用您的同步适配器)。可以在in this blog post 找到有关同步适配器的概述。

如果你没有服务器端账户,只有一个日历,第一次启动时需要做一些事情:

  1. 创建帐户
  2. 创建绑定到该帐户的日历
  3. 启用您的同步适配器

之后,Android 将不时执行您的同步适配器,并且您可以访问SYNC_DATA 列而不会发生冲突(在您创建的日历中)并且DIRTY 标志会正确提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多