首页 文章

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

提问于
浏览
16

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

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

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

我想使用Android Calendar API而不是Google API,以便用户可以脱机工作 .

2 回答

  • 2

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

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

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

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

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

    您可以做的解决方法是直接在Google Calendar online API上实现必要的"create calendar"函数 . 它要求您的应用通过 android.permission.USE_CREDENTIALS 要求用户授权 .

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

    但是,该解决方法存在两个大问题:

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

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

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

  • 3

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

    更多细节:https://stackoverflow.com/a/19734278/237232

相关问题