获取 Android 日历事件的唯一 ID

jmh*_*end 5 icalendar android android-calendar

我做了很多研究,但找不到如何访问 Android 日历事件的真正唯一 ID。我查询以下内容URI

Context.getContentResolver().query(Events.CONTENT_URI, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

Cursor在我的 Galaxy Nexus 上查看结果时,没有与iCalGUID我正在寻找的表单(见下文)相似的内容。但是,当在 HTC One S 上执行相同的查询时,我注意到 HTC 已将其iCalGUID作为额外的列字段包含在内,它返回的正是我正在寻找的 ID 类型。它看起来像这样:

9ced5c2c-6ed9-481f-9f69-9a064810ac0f
Run Code Online (Sandbox Code Playgroud)

iCalGUID不过,这个字段看起来不像是 Android SDK 标准,所以我无法在其他 Android 手机上获取此 ID。我的问题是,有什么方法可以以标准 Android 的方式获得这种类型的 ID?我现在的目标是 ICS,但希望将来能够灵活地将其扩展到以前的版本。

如果我应该使用其他类型的 ID,那也很好。注意:我不是在寻找Events._ID专栏。我需要我的 ID 在所有设备和所有类型Account(Google、Exchange、Hotmail 等)中都是唯一的

谢谢!

Dan*_*rts 2

字段UID_2445就是用于此目的,但不幸的是它几乎从未被填充,并且从未使用实际的 UID

同步器可以访问各种同步字段,在我的测试中这些同步字段始终保存事件原始 ID。问题是填充的字段取决于特定的同步器,没有标准。您需要同步器读取权限才能查看这些字段。

它不受支持,我也不推荐它,但您可以查看帐户类型(例如 com.android.exchange)来找出同步器,然后查看通常填充 UID 的字段。在我的测试中,除 Google 之外的所有内容均使用同步数据 2,即同步数据 1。