Android日历:如何为日历INSERT编写同步适配器

时间:2013-05-03 13:27:23

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

我基本上想重新打开以下未答复的帖子:

我想利用Android日历提供程序API来创建日历 并将事件插入其中。创建的日历不能是本地副本。 它必须与Google(在线)日历同步。文件中说 为了做到这一点,我必须使用同步适配器。但是我该如何编写这样的同步适配器?

到目前为止,我发现以下两个帖子但没有解决方案。

我想为此使用Android日历API,而不是Google API 用户可以离线工作。

2 个答案:

答案 0 :(得分:4)

看起来Google在这方面弄乱了CalendarContract。文档并不完全清楚:

  

...插入新日历应该作为同步适配器完成。

这种措辞的方式在我看来似乎有可能起作用的可能性很小。但实际上(判断您链接的其他SO问题)使用CalendarContract的应用程序无法创建同步日历。

您真的不想经历创建自己的SyncAdapter的所有麻烦。我为我的一个应用程序做了一次,因为我想要一个可靠的解决方案,在冰淇淋三明治设备上同步日历访问(CalendarContract还不存在)。

那是很多工作。它涉及与Google日历网络服务API的接口(同时尊重其访问限制),保留数据的本地副本并仅同步差异。最终,您自己的SyncAdapter还会复制现有Google Calendar SyncAdapter的数据。

你可以做的解决方法就是实施必要的"创建日历"直接在Google Calendar online API上运行。 它要求您的应用通过android.permission.USE_CREDENTIALS要求用户授权。

AccountManager可用于获取访问Google Calendar API的正确授权令牌。方法getAuthToken需要auth令牌类型参数。用于日历读/写访问的正确字符串是以下字符串文字:"Manage your calendars"

但这种解决方法存在两个大问题:

  1. 您无法确定日历同步后端是否使用Google日历。不幸的是,它是一个黑盒子。

  2. 您无法确定日历同步适配器何时能够赶上这些更改。我想有可能以某种方式强制重新同步。但即使这样,你的应用程序也会停滞不前。您不能仅基于该新日历进行操作并立即使用它。您的应用必须等到同步发生。

  3. 您可以为此轮询CalendarContract。让您的应用等待并查看后台线程中的更改,直到新日历显示为止。然后你有它的本地ID并继续前进。

答案 1 :(得分:2)

目前无法使用Clanedar API以编程方式使用Google(Gmail)帐户创建可同步日历。 SyncAdapter可用于创建新的非Gmail帐户并在其中创建新日历,但这些日历无法与Google日历同步。

此处有更多详情:https://stackoverflow.com/a/19734278/237232