删除并更新现有日历事件

时间:2015-07-07 09:38:32

标签: android calendar android-calendar

我正在关注this要点,将insert事件发送到Calendar

我如何update现有的日历事件,我之前使用以下代码插入:

public void addToCalender() throws ParseException {

        ......

        ContentValues event = new ContentValues();
        event.put(CalendarContract.Events.CALENDAR_ID, calendarId[0]);
        event.put(CalendarContract.Events.TITLE, "Event Title");
        event.put(CalendarContract.Events.DESCRIPTION, "Event Description");
        event.put(CalendarContract.Events.EVENT_LOCATION, "Eevnt Location");
        event.put(CalendarContract.Events.DTSTART, startCalTime);
        event.put(CalendarContract.Events.DTEND, endCalTime);
        event.put(CalendarContract.Events.STATUS, 1);
        event.put(CalendarContract.Events.HAS_ALARM, 1);
        event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());

        Uri insertEventUri = AddEventActivity.this.getContentResolver().insert(
                eventsUri, event);

        ContentValues reminders = new ContentValues();
        reminders.put(Reminders.EVENT_ID,
                Long.parseLong(insertEventUri.getLastPathSegment()));
        reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT);
        reminders.put(Reminders.MINUTES, 10);

        AddEventActivity.this.getContentResolver().insert(remainderUri, reminders);
    }

我想知道,我如何:

1. Remove existing event

2. Update existing event

2 个答案:

答案 0 :(得分:3)

以下是修改活动的方法。假设它的ID是eventID:

public void updateEvent(int eventID)
{
    ContentResolver cr = context.getContentResolver();
    Uri eventUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
    ContentValues event = new ContentValues();
    event.put(CalendarContract.Events.TITLE, "new title");
    event.put(CalendarContract.Events.DESCRIPTION, "My cool event!");
    cr.update(eventUri, event, null, null);
}

要删除某个事件,您有两种可能性:

如果您是标准申请: 使用前面的代码并用以下代码替换所有event.put:

event.put(CalendarContract.Events.DELETED, 1);

如果您是日历的SyncAdapter并想要真正的删除(之前的方法只是说应删除该事件,并且在同步日历后必须使用后面的事件:

public deleteEvent(Uri eventUri)
{
    cr.delete(event, null, null);
}

其中eventUri是先前从事件ID获得的事件的Uri。

对于所有以前的方法,如果你得到一个关于不在同步适配器中的例外,你可以使用它:

public static Uri asSyncAdapter(Uri uri, String account, String accountType)
{
    return uri.buildUpon()
            .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, account)
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType)
            .build();
}

我希望这会对你有所帮助。

来源:个人代码+ http://developer.android.com/guide/topics/providers/calendar-provider.html

答案 1 :(得分:1)

  

...
  事实上,Outlook似乎回应了RFC 2446

中定义的规则      

总之,您必须指定

     

METHOD:REQUESTORGANIZER:xxxxxxxx
  ...
  Please read the original answer by Tom Carter.