Удаление и обновление существующего события календаря

Я следую этот gist, в 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

Ответы

Ответ 1

Вот как вы можете изменить событие. Пусть говорят, что его 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 - это 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