【问题标题】: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 修改。

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

【问题讨论】:

    标签: android calendar android-contentprovider android-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
    猜你喜欢
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2021-02-20
    • 2013-07-17
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多