我一直在浏览有关如何从我的Android 2.3手机日历中删除一个重复事件的一个实例的各种帖子,但我找不到完美的答案 . 到目前为止,我遇到的最好的是:
Uri eventsUri = Uri.parse("content://com.android.calendar/events");
Uri deleteEventUri = Uri.withAppendedPath(eventsUri, String.valueOf(id2));
DeleteEventActivity.context.getContentResolver().delete(deleteEventUri, null, null);
其中id2是我要删除的事件的id . 我遇到的问题是我只想删除一个重复事件的一个实例,但是这段代码会删除所有出现的事件 . 有没有办法只删除一个实例?谢谢 .
3 回答
以下是基础知识
找到要删除的实例 . (使用Instances.query())
使用事件ID appended创建exception URI .
创建
ContentValues
. 将实例的BEGIN值设为...Events.ORIGINAL_INSTANCE_TIME . 把STATUS_CANCELED作为...Events.STATUS现在只有insert(yourURI, yourValues)而且就是这样!
如果还有其他人仍在努力解决这个问题,我终于破解了!
事实证明,您不删除或修改任何记录,您实际做的是插入一个称为异常的新事件 . 我花了几个月的时间在任何地方找到这些信息,甚至找到了它,再过几个月就可以确定需要将什么内容放到异常中才能使它工作,所以我就是这样做的 .
首先,查询要取消一次事件的事件的实际实例 . 您需要查询表CalendarContract.Instances以获取CalendarContract.Instances.TITLE,CalendarContract.Instances.BEGIN和CalendarContract.Instances.EVENT_ID的值 . 我在代码中执行此操作的方式并不完全符合此答案的上下文,因此希望您能够自己解决如何执行此操作的方法 . 将这些值存储为:
final String title = eventCursor.getString(0); final long beginl=eventCursor.getLong(1); final int id = eventCursor.getInt(2);
然后我们需要设置一个新事件,如下所示:
希望这有效,我试图删除不相关的代码部分 . 你会注意到我必须将3600000添加到beginl值(1小时,以毫秒为单位) . 我认为这是因为我们现在处于BST状态,并且一旦时钟发生变化,这段代码将无法工作,但我当时会担心这一点!
最后,我使用了一个名为Content Provider Helper的应用程序来帮助我找到它 . 您可以使用它查询您的内容提供者表 . 我会尝试使用我的代码设置异常,然后使用我的手机日历应用程序删除实例,并比较两个记录 .
您必须更新原始事件的EXDATE列 .