【发布时间】:2014-11-20 10:10:06
【问题描述】:
我知道,我不是第一个问这个的人。我在堆栈本身中发现了许多问题,例如
Delete only one instance of a recurring event from my Android calendar
Android Calendar Provider exception on recurring events
Android Calendar Specific Event Deletion
但以上都没有解决问题。现在到我的代码。
我正在为所有操作使用日历合同提供程序 api(不需要支持旧的 android 版本)。及其不是同步适配器。
我们成功删除了所有事件(通过从事件表本身中删除事件)。
但是当我尝试使用 Events.CONTENT_EXCEPTION_URI(通过插入)删除事件发生时,所有事件都消失了。以下是我的代码
ContentValues args = new ContentValues();
args.put(Events.TITLE, eNote.getEventTitle());
args.put(Events.DTSTART, eNote.getStartTimeMill());
args.put(CalendarContract.Events.ORIGINAL_INSTANCE_TIME, eNote.getStartTimeMill());
args.put(Events.ORIGINAL_SYNC_ID, 1);
args.put(Events.HAS_ALARM, "0");
args.put(Events.HAS_ATTENDEE_DATA,"0");
args.put(CalendarContract.Events.EVENT_TIMEZONE, eNote.getTimeZone());
args.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CANCELED);
Uri.Builder eventUriBuilder = CalendarContract.Events.CONTENT_EXCEPTION_URI.buildUpon();
ContentUris.appendId(eventUriBuilder, eventID);
try {
final Uri resultUri = activity.getContentResolver().insert(eventUriBuilder.build(), args);
int eventIDNew = Integer.parseInt(resultUri.getLastPathSegment());
Log.i(Global.DEBUG_TAG,"eventIDNew : " +eventIDNew);
} catch (Exception e) {
e.printStackTrace();
Log.i(Global.DEBUG_TAG,
"Eroor : " +e.getMessage() );
}
eNote 是一个对象,用于存储实例表中事件的详细信息,
给定值 args.put(Events.ORIGINAL_SYNC_ID, 1);直接,因为我在创建事件时没有设置同步 ID,我们不需要任何同步操作
插入异常 uri 会返回一个新 ID,但这会使所有事件消失。
代码有什么问题.. 请帮助我们,我们欢迎所有的建议和提前感谢所有...
【问题讨论】:
-
stackoverflow.com/questions/10462095/… 其中一个答案提供了一个可能的(未经测试的)解决方案。您必须创建一个异常事件。
-
@Emile 感谢您的回复,我已经看到了一个并遵循相同的方式,但它会导致删除所有发生或一个月的事件。有时它的行为就像删除后不会从实例表返回任何事件,但几分钟后它会在事件被正确删除时正确返回事件(但删除后不会立即返回任何事件)..请分享您的任何想法..这对我来说将是一个非常巨大的帮助....
-
要删除一个事件,您需要更新 EXDATE 字段。在您的代码中,您需要删除“CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CANCELED”stackoverflow.com/questions/17289153/…
-
恐怕我自己不必这样做,但有更多链接供参考。 stackoverflow.com/questions/14522393/…
-
@Emile 我试过一次,在这种情况下,在三星 Galaxy Duos 设备日历中删除该状态,通风口在删除的日子被列为分隔事件(意味着创建了例外但仍显示事件)。对于第二个链接,我阅读了一些我们不需要插入到 exdate 的地方,因为它是由 Events.ExceptionURI 本身处理的。但是我会手动尝试那个...我非常感谢为了您的支持...
标签: android calendar android-calendar