Android:如何以编程方式将定期事件更改为一次性事件

时间:2014-12-01 11:20:13

标签: android android-calendar

您好我正在使用日历合同API,并且仅支持API级别14及更高级别,因此我不关心旧版本支持。

将重复事件更新为单次发生事件时,我遇到了问题。 我不能'在更新事件时提供Events.DTEND值,因为错误显示为Events.DURATIONEvents.DTEND无法同时出现。

我没有通过Events.DURATION,但Android不允许更新活动,但是如果我将Events.DURATION作为空deviceCalendarValues.put(Events.DURATION, "");传递给Events.DTEND的正确值Events.CONTENT_URI 1}}。这导致更复杂的情况,例如将添加两个事件,其将持续时间为零并且使开始和结束时间相同。其他事件将与时间和时间以及日历同步后的给定数据一起出现(我将事件添加到谷歌日历中与其他可用日历一起列出)具有正确数据的事件将被删除并且错误的事件将被删除在那里存在。

我在updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, event_dao.getI_EventID()); updatedRowCount = activity.getContentResolver().update(updateUri, deviceCalendarValues, null, null); 上更新的内容还有

{{1}}

这里出了什么问题?将重复事件更改为单个事件事件的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

    ContentValues values = new ContentValues();
    if(this.id>0)
        values.put(Events._ID, this.id);

    values.put(Events.DTSTART, this.startMillis);
    if(title!=null)
        values.put(Events.TITLE, title.toString());
    if(description!=null)
        values.put(Events.DESCRIPTION,  description.toString());

    values.put(Events.CALENDAR_ID, SharedPreferenceManager.getSharedInstance().getCalendarId());

    values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

    if(location!=null)
        values.put(Events.EVENT_LOCATION,  location.toString());
    values.put(Events.ALL_DAY, allDay ? 1 : 0);

 if(!TextUtils.isEmpty(rule)) { 
        values.put(Events.RRULE, rule);
        values.put(Events.DURATION, getDuration());
        values.put(Events.DTEND, (Long) null);
    }else {
        values.put(Events.DTEND, endMillis);
}

    values.put(Events.ACCESS_LEVEL, 0);// Default (0), Private (2), Public (3)
    values.put(Events.EVENT_COLOR_KEY, AppUtility.getColorKeyFromColorCode(color));   

如果是重复发生的事件,则应将TEND传递为null