【问题标题】:Android Calendar Provider does not return latest dataAndroid Calendar Provider 不返回最新数据
【发布时间】:2020-04-03 13:17:37
【问题描述】:

我正在使用以下代码:

String selection = "((dtstart >= " + now
        + ") AND (dtend <= " + endTime.getTimeInMillis() + "))";
Cursor cursor = context.getContentResolver()
        .query(Uri.*parse*("content://com.android.calendar/events"),
                *PROJECTION*, selection,null, null);

而且我注意到,一旦我将Event 添加/删除到设备上的 Google 日历应用程序并立即运行上述代码,有时我无法从 Cursor 获取最新数据集。我必须手动刷新 Google 日历应用才能获取最新数据。

我错过了什么吗?我可以使用其他一些 API 吗?

谢谢!

【问题讨论】:

  • “我错过了什么吗?” -- Google 日历应用程序的行为取决于其开发人员。他们不需要更新该提供程序,更不用说在某些特定时间范围内更新了。就此而言,他们不需要在特定时间范围内更新自己的服务器。如果他们选择缓冲和推迟更新他们的 Web 服务,那就是他们的决定。
  • @CommonsWare CalendarProvider 的文档是否说明数据可能不是最新的?
  • AFAIK,CalendarProvider 的文档没有就其内容的新鲜度做出任何声明。甚至不需要任何日历应用程序使用 CalendarProvider。他们可以使用自己的数据库、服务器或其他任何东西来代替CalendarProvider。现在,在理想情况下,Google 日历会快速更新CalendarProvider。我认为可以肯定地说这不是一个理想的世界。 :-( 我的意思是,您正在对特定应用程序的行为做出假设,而这些实际上是更多的希望和梦想。
  • @CommonsWare 那么在这种情况下推荐的方法是什么。如果可能的话,我想避免使用谷歌登录。
  • @CommonsWare 我想一个更好的问题是,Calendar API 与 CalendarProvider 之间有什么区别。

标签: android google-calendar-api android-calendar android-contentresolver


【解决方案1】:

你是对的。由于某些原因,无论是错误还是“功能” - 过去 4-5 个月的 Google 日历提供商在与服务器同步之前不会通过 CalendarContract 公开更改。

在此之前,所有更改都可以通过 CalendarContract 立即用于 3 方应用程序 - 现在只有在同步之后。这很烦人...除非您在 Google 日历应用程序中手动执行同步,否则您永远不知道您是否有新数据(或者您可以等到自动同步触发器 - 可能在几秒钟、几分钟或几小时内,它不在您的手)。

如此愚蠢,愚蠢的变化。经典的谷歌。他们已经搞砸了很多事情,这只是另一件事。它们只会让开发者的生活变得复杂。

【讨论】:

    【解决方案2】:

    要在将事件添加到日历后获取最新数据,您可以监听日历以了解事件变化

    【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2014-12-10
    • 2021-02-05
    • 2014-07-27
    • 2013-12-04
    • 2016-07-18
    • 2021-10-19
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多