Android事件ID在日历中是否唯一?

Android事件ID在日历中是否唯一?,android,android-calendar,Android,Android Calendar,我正在尝试使用Android的日历提供程序管理应用程序中的日历事件。在日历中,显示了以下方法来删除事件和打开事件: 要删除事件,请执行以下操作: private static final String DEBUG_TAG = "MyActivity"; ... long eventID = 201; ... ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); Uri dele

我正在尝试使用Android的日历提供程序管理应用程序中的日历事件。在日历中,显示了以下方法来删除事件和打开事件:

要删除事件,请执行以下操作:

private static final String DEBUG_TAG = "MyActivity";
...
long eventID = 201;
...
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
Uri deleteUri = null;
deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
int rows = getContentResolver().delete(deleteUri, null, null);
Log.i(DEBUG_TAG, "Rows deleted: " + rows);
要使用日历意图打开日历中的特定事件,请执行以下操作:

long eventID = 208;
...
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW)
   .setData(uri);
startActivity(intent);

这很有效,但我注意到,与其他事务(如创建和检索事件)不同,日历id似乎并不重要。为什么会这样我可以安全地假设系统保证所有日历中的所有事件ID都是唯一的吗?或者可能存在多个具有相同ID的事件,然后会发生什么?

是的,该假设是正确的。与Uri一起传递的事件ID直接映射到行
\u ID
字段,该字段是事件表的主键。 因此,每个事件都有一个(系统范围的)唯一id

如果遵循中的
deleteEventsInternal
调用,可以看到传递的ID与事件表的
\u ID
字段相比较

中的选择最终计算为
\u id=

关于你的问题“为什么会这样?”:

日历和事件之间的关系是一对多关系,这意味着一个日历可能包含多个事件,但一个事件只属于一个日历

在日历数据库中表示的方式是在关系数据库中对此进行建模的标准方式,请参见


在数据库设计中,这也称为。

事件表包含日历id列的事实表明所有日历共享同一个事件表。这反过来意味着事件ID(=行ID?)在该表中是唯一的,因此在所有日历中都是唯一的。我不能确定我的结论是否可信,请专家确认。这是calendar_id,指活动所属日历的_id。这意味着多个事件可以属于一个具有唯一id的日历,实际上,我正在检索我创建的所有事件,但我得到了包括默认假日在内的所有事件列表,我在日志中看到日历包含假日,该假日的唯一日历id为3,其中我添加了日历id为4的事件,我想知道如何获取由我创建的事件列表,如何识别我的事件列表的日历id。@farhana从您的描述很难判断问题出在哪里。您应该在一个新问题中发布这个问题,提供代码片段来说明您的问题是什么。