Android Calendar Provider:是不是有可跨多个设备使用的事件唯一标识符?

Posted

技术标签:

【中文标题】Android Calendar Provider:是不是有可跨多个设备使用的事件唯一标识符?【英文标题】:Android Calendar Provider: Is there a unique identifier for events, usable across multiple devices?Android Calendar Provider:是否有可跨多个设备使用的事件唯一标识符? 【发布时间】:2013-07-24 10:51:14 【问题描述】:

我正在使用 android 日历提供程序来显示事件。 我还通过使用事件的 EVENT_ID 作为参考,将事件与本地应用程序数据库中的图像相关联。

我现在想知道是否可以在多个设备上保持相同的引用?

我了解对于 account_type = 'com.google',GoogleCalendarSyncAdapter 使用 CalendarContract.EventsColumns.SYNC_DATA1 来存储事件的 googleID。 但是,这似乎不是访问数据的可靠方法,因为 SYNC_DATA 列的使用可能随时更改,并且只能由 SyncAdapter 修改。

有没有其他方法可以跨设备保留对日历提供程序事件的引用?

【问题讨论】:

【参考方案1】:

将图片 ID 嵌入您的活动中

不久前,我在使用 CalendarContract 时遇到了类似的问题,我通过将唯一的 UID 标签嵌入到事件描述文本中来解决了这个问题。客户端将解析该标签并检索公共 UID。该 ID 是使用UUID Java 类在其中一个客户端上生成的。但是,就我而言,我更感兴趣的是识别使用我的应用创建的事件。

在您的情况下,我假设您的图像数据库引用是在所有应用安装中一致的稳定 ID。您可以在引用数据库中图像的事件描述文本中插入一个标签,例如:

<myapp:imgid_1234>

或者,您也可以向您的事件添加一个特殊的“资源类型”attendee,从而将该图像引用添加到事件:imgid_1234@yourappname.com。此选项将保持事件描述的简洁,并可能减少通过用户的意外删除。

【讨论】:

谢谢,这是相当的技巧,但可能是唯一的方法。问题是其他应用程序可以显示、修改或删除与会者,因此可能不值得冒险。 @ChristopherMasser 不要担心其他应用程序,担心用户并告诉他们不要删除这些自动生成的与会者,因为这符合他们自己的利益。从 CalendarContract API 的角度来看,据我所知,没有其他方法可以将元信息添加到事件中。只有 SyncAdapter 拥有该权限。但是,您可以直接连接 Google Calendar API 并使用 extendedProperties 对象,该对象可以保存特定于应用程序的任意数据键值对。见这里:developers.google.com/google-apps/calendar/v3/reference/events

以上是关于Android Calendar Provider:是不是有可跨多个设备使用的事件唯一标识符?的主要内容,如果未能解决你的问题,请参考以下文章

从 QT / C++ 项目访问 Android 日历提供程序

如何通过Android日历api插入日程(事件)和提醒(通知)

如何通过Android日历api插入日程(事件)和提醒(通知)

对于 GMT +x 区域,Android 日历全天活动日期提前一天

??????????????? DocumentProvider Uri?????????

Android中Calendar类的用法总结